我在个人资料视图中设置了上下文变量-用户昵称:
class ProfileView(LoginRequiredMixin, TemplateView):
template_name = 'profile/templates/profile.html'
redirect_field_name = ''
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
profile_id = Profile.objects.get(pk=self.request.user.id)
context['user_nick'] = Blogger.objects.get(profile_id=profile_id).nick
return context
并输入网址:
path('bloggers/<slug:nick>/videos', bloggers_views.BloggerVideos.as_view(), name='blogger_videos'),
我也在我的navbvar中传递了nick:
{% if user.is_authenticated %}
{% include 'navbar/templates/navbar.html' with nick=user_nick %}
{% endif %}
像这样引用它:
<li><a href= {% url 'bloggers' %}><span>Bloggers {{ nick }}</span></a></li>
<li><a href= {% url 'blogger_videos' nick %}>Blogger's videos</a></li>
奇怪的是,在第一种情况下Django正确渲染了nick,但在第二种情况下它崩溃并出现以下错误:
NoReverseMatch at /bloggers/Gardiner/videos
Reverse for 'blogger_videos' with arguments '('',)' not found. 1 pattern(s)
tried: ['bloggers\\/(?P<nick>[-a-zA-Z0-9_]+)\\/videos$']
根本看不到尼克:
candidate_subs {'nick': ''}
可能的解决方案是什么?
答案 0 :(得分:0)
您将变量传递为user_nick
,而不是nick
。另外,您应该在关键字关键字参数中引用它。第三,您应该将整个URL放在HTML中的引号中。
<a href="{% url 'blogger_videos' nick=user_nick %}">