【发布时间】:2014-07-17 21:34:26
【问题描述】:
我已经尝试了所有方法,并且阅读了有关该主题的所有问题/答案,但没有什么对我有用。我希望有人可以提供另一种可能的解决方案。
我有几个应用程序。其中之一是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)
【问题讨论】:
-
为什么不使用 url 的参数
name中的值呢? (即{% url 'view_user' username=user.username %}。您的参数也称为命名参数,因此您必须通过它的名称(username) -
@yedpodtrzitko 如果我不指定应用名称,Django 怎么知道
'view_user'在哪里?请记住,此视图位于不同的应用中。 -
嗯...我现在唯一能建议的就是系统地测试每个部分。首先删除所有参数要求,然后使用
url(r'^user/view/$', views.view_user, name='view_user')。修改您的视图函数以删除参数:def view_user(request):。如果它仍然不起作用,您需要更深入地挖掘 URL 未加载的原因。如果它有效,那么它可能与正则表达式有关。就个人而言,我总是在 URL 中使用数字 ID,而不是用户名,因为它们可能包含有趣的字符。哦,还要删除所有视图装饰器以将它们隔离为一个原因 -
....问题是....我没有关闭并重新启动服务器。当我这样做时,使用此处推荐的设置,它起作用了。谢谢大家的建议。
-
哈哈,这也发生在我身上。特别是因为修改模板文件不需要重新启动,但修改视图/url 需要重新启动。棘手!
标签: django django-urls django-templates django-1.5