在URL中显示用户名 - Django

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)

这是它尝试渲染的代码,但不能.在此输入图像描述

预先感谢您的帮助!

Sel*_*cuk 8

简短回答:问题在于您的模板代码.您没有将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)