jph*_*jph 2 python django url django-views
当我尝试在URL中显示用户名时,出现此错误:
使用参数'()'和未找到关键字参数'{}'来反转'account_home'.尝试了1种模式:['/(?P\w +)/ $'].
这是我的views.py
@login_required
def account_home(request, username):
u = MyUser.objects.get(username=username)
return render(request, "accounts/account_home.html", {})
Run Code Online (Sandbox Code Playgroud)
这是我的urls.py
urlpatterns += patterns('accounts.views',
# url(r'^account/$', 'account_home', name='account_home'),
url(r'^/(?P<username>\w+)/$', 'account_home', name='account_home'),
url(r'^logout/$', 'auth_logout', name='logout'),
url(r'^login/$', 'auth_login', name='login'),
url(r'^register/$', 'auth_register', name='register'),
)
Run Code Online (Sandbox Code Playgroud)
这是它尝试渲染的代码,但不能.
预先感谢您的帮助!
简短回答:问题在于您的模板代码.您没有将username参数传递给视图.代替
<a href="{% url 'account_home' %}">Account<a>
Run Code Online (Sandbox Code Playgroud)
尝试
<a href="{% url 'account_home' user.username %}">Account<a>
Run Code Online (Sandbox Code Playgroud)
答案很长:话虽如此,你可以username通过修改视图来摆脱参数.您已request在视图中的对象中拥有当前用户:
@login_required
def account_home(request):
u = MyUser.objects.get(username=request.user.username)
return render(request, "accounts/account_home.html", {})
Run Code Online (Sandbox Code Playgroud)
并从网址定义中删除它:
url(r'^$', 'account_home', name='account_home'),
Run Code Online (Sandbox Code Playgroud)