Django url模板标记给出NoReverseMatch错误

时间:2014-05-28 15:08:30

标签: django django-urls django-templates django-1.5

我已经尝试了所有内容,并且我已经阅读了有关该主题的每个问题/答案,但没有任何内容对我有用。我希望有人可以提供另一种可能的解决方案。

我有几个应用程序。其中一个是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)

2 个答案:

答案 0 :(得分:3)

您需要在url模板标记内传递username关键字参数:

{% url 'view_user' username=user.username %}

此外,正如@yedpodtrzitko建议的那样,您可以使用视图名称而不是它的完整路径。

不要忘记重启服务器,以便更改生效。

答案 1 :(得分:-1)

您使用的是哪个版本的django。如果旧版本意味着1.3,那么您可能必须在顶部的模板文件中使用以下行

{% load url from future %}

如果您使用的是django 1.5,那么alecxe解决方案是完美的,因为除此之外我还没有看到代码/流程中出现任何问题