Django Template изменяет атрибут html на основе slug и текущего запроса

Когда я попытался просмотреть список заголовков постов для создания ссылок в шаблоне django, урлы никогда не соответствуют запрошенному пути (соответствие текущей веб-странице должно изменить форматирование на странице для этого элемента списка). Когда я пытаюсь изменить ситуацию, Django выдает ошибку 404, которая не позволяет мне диагностировать проблему, или же она "работает", но не так, как ожидалось.

соответствующие шаблоны url:

 path('<slug:post>', views.blog_post, name='entries')  

соответствующая функция представления:

def blog_post(request, post):
    try:
        return render(request, 'blog/post.html', {
            'post_title':post,
            'post_content':blog_posts[],
            'posts':blog_posts.keys
            })
    except:
       raise Http404()

шаблон:

<ul>
   {% for post in posts %}
   {% url "blog:entries" "{{post}}" as blog_entry %}
   <li><a href="/blog/{{post}}" {% if request.path == blog_entry %} class="active"{% endif %}>
   <span class="item">{{post}}</span>
   </a></li>
   {% endfor %}
</ul>

Я подозреваю, что {% url "blog:entries" "{{post}}" as blog_entry %} в шаблоне разрешается неправильно, поскольку когда я заменяю href на {% blog_entry %}, это приводит к 404 ошибке.

Я пробовал жестко закодировать его, я пробовал разные способы написания url, я пробовал изменить синтаксис (на случай, если я делаю это неправильно. Я проверял исходный текст страницы, когда запускал тесты. Я никогда не мог заставить атрибут class быть "активным" на соответствующей странице.

urls.py никогда не получает правильный путь, потому что вы допустили несколько ошибок. Если я правильно вас понял, вы хотите, чтобы один блог был виден в деталях (чтобы получить объект одного блога).

urls.py

path('blog/' all_blogs, name='all_blogs'), # all blogs
path('blog/<str:slug>', views.single_blog, name='single_blog'), # one blog

views.py

def all_blogs(request):
    blogs = Blogs.objects.all()
    return render(request, tmpl_name, {'blogs':blogs})

def single_blog(request, slug):
    try:
        blog = Blog.obejcts.get(slug=slug)
        return render(request, tmpl_name, {"blog":blog})
    except Blog.DoesNotExist:
        # You can return error message or 404 page what ever you like.
Вернуться на верх