我已经尝试了所有内容,并且我已经阅读了有关该主题的每个问题/答案,但没有任何内容对我有用。我希望有人可以提供另一种可能的解决方案。
我有几个应用程序。其中一个是ManagerApp
,其中一个是Accounts
。
在Accounts
应用中,有一个名为view_user
的视图。它在url文件中描述为
url(r'^user/view/(?P<username>.+)/$', views.view_user, name='view_user')
在base.html
中,有一个标题栏,其中包含用户名。当他点击他的名字时,我希望他被带到他的个人资料页面。所以它的内容如下:
...
<ul class="nav navbar-nav navbar-right">
{% if user.is_authenticated %}
<li><a href="{% url 'accounts.views.view_user' user.username %}">{{user.username}}</a></li>
{% else %}
<li><a href="#">My Account</a></li>
{% endif %}
...
但是当我尝试加载页面时,我得到了一个
**NoReverseMatch at /ManagerApp/main/
Reverse for 'accounts.views.view_user' with arguments '(u'johnny',)' and keyword arguments '{}' not found.**
为什么会这样?我使用引号,语法没问题。 UrlConf名称正确,等等。我只是看不到问题,而且已经过了一个小时: - (
加
这是视图定义:
def view_user(request, username):
''' Shows user data '''
user = get_object_or_404(User, username = username) #check if user name exist
groups = Group.objects.filter(users = user)
context = {'user': user, 'groupsOfUser': groups}
return render(request, 'accounts/view_user.html', context)
答案 0 :(得分:3)
您需要在url
模板标记内传递username
关键字参数:
{% url 'view_user' username=user.username %}
此外,正如@yedpodtrzitko建议的那样,您可以使用视图名称而不是它的完整路径。
不要忘记重启服务器,以便更改生效。
答案 1 :(得分:-1)
您使用的是哪个版本的django。如果旧版本意味着1.3,那么您可能必须在顶部的模板文件中使用以下行
{% load url from future %}
如果您使用的是django 1.5,那么alecxe解决方案是完美的,因为除此之外我还没有看到代码/流程中出现任何问题