Django странно ведет себя с url, содержащими slug и /

Я сталкиваюсь со странным поведением django, которое я не вижу, где оно может пойти не так. У меня есть начало приложения, которое возвращает динамические страницы, чьи url создаются через slug. Все работает хорошо. С любым слизнем, который я пробую, все работает отлично, и урлы находят свой путь без проблем. Все они проходят по одному и тому же пути. Но есть ТОЛЬКО один слиг, который не находит путь. Особенность поведения заключается в том, что в url браузера это единственный <a href>, который добавляет / к url, хотя в html-коде у него нет / в href. Я не понимаю, когда добавляется /, поскольку все страницы генерируются динамически и проходят через один и тот же процесс.

Это страница, отправляемая в браузер со всеми ссылками. Урл формируется динамно со слигом модели каждого поста.

        <h2><a href="/posts/first-post"> my post first </a></h2>
        <h2><a href="/posts/fourth-post"> my 4th post </a></h2>
        <h2><a href="/posts/ready-for-summer"> Ready for Summer Fun! </a></h2>
        <h2><a href="/posts/third-post"> my 3th post </a></h2>
        

При нажатии на каждую ссылку все проходит нормально и страница с постом отправляется. url в браузере после клика такой:

http://localhost:8000/posts/first-post/ <<<<<<--------- / показывается

http://localhost:8000/posts/fourth-post

http://localhost:8000/posts/ready-for-summer

http://localhost:8000/posts/third-post

Как вы можете видеть, / в конце url отображается только first-post/. Я не понимаю, почему это происходит. Я пробовал разные slug'ы для одного и того же 'post' и во всех случаях находил, что / не добавляется в конце, и страница отправляется без проблем. И только когда я использую слизень 'first-post', / добавляется.

html где <a href> генерируется:

{% block content %}

<section>
    <h1>Post List</h1>
    {% for post in posts %}
    <article class='post'>
        <h2><a href="{% url 'posts:page' slug=post.slug %}"> {{ post.title }} </a></h2>
        
        <p>{{ post.date }}</p>
        <p>{{ post.body }}</p>
    </article>
     {% endfor %}
        
</section>
{% endblock %}

urls.py приложения

app_name= 'posts' #defina namespace

urlpatterns = [
     path('', views.posts_list, name='posts_list'),
     path('<slug:slug>', views.post_page, name='page'),
    ]

views.py из приложения:

def post_page(request, slug):
    try:
        post = Post.objects.get(slug=slug)
        print('TEST Post found:', post)
    except Post.DoesNotExist:
        print('TEST Post not found')
        return HttpResponse('Post not found', status=404)
    return render(request, 'posts/post_page.html', {'post': post})

запрос из оболочки, в котором вы можете увидеть слизняк 'first-post':

>>> from post.models import Post
>>> post = Post.objects.get(slug='first-post')
>>> print(f"'{post.slug}'")
'first-post

Странно то, что все 'post' проходят через один и тот же процесс, и все slugs работают нормально, ТОЛЬКО 'first-post' не работает.

Я не знаю, является ли проблема в браузере, когда добавляет / только к http://localhost:8000/posts/first-post/.

Я все проверил.

Я могу решить проблему, добавив / в путь <slug:slug>/, path('<slug:slug>/', views.post_page, name='page')

Но это не решает проблему, а лишь меняет способ обращения к пути. Но это изменение заставляет браузерный url иметь / за ресурсом html, чего я не хочу.

Тогда вопрос в том, почему / добавляется так произвольно только при 'first-post'.

Я перепробовал все, что знал.

Вернуться на верх