Python 如何链接到用户';django的个人资料
我一直试图链接到用户的个人资料页面,但每次我尝试它,它返回一个404错误。我不知道,但可能错误在URL.py文件中 views.pyPython 如何链接到用户';django的个人资料,python,html,django,django-views,django-templates,Python,Html,Django,Django Views,Django Templates,我一直试图链接到用户的个人资料页面,但每次我尝试它,它返回一个404错误。我不知道,但可能错误在URL.py文件中 views.py def profile(request, username=None): if username: post_owner = get_object_or_404(User, username=username) else: post_owner = request.user args1
def profile(request, username=None):
if username:
post_owner = get_object_or_404(User, username=username)
else:
post_owner = request.user
args1 = {
'post_owner': post_owner,
}
return render(request, 'profile.html', args1)
url.py
urlpatterns = [
path('<str:username>/', views.profile, name='profile'),
path('login', views.login, name='login'),
path('register', views.register, name='register'),
path('logout', views.logout, name='logout'),
]
urlpatterns=[
路径(“/”,views.profile,name='profile'),
路径('login',views.login,name='login'),
路径('register',views.register,name='register'),
路径('logout',views.logout,name='logout'),
]
index.html
<a class="nav-link" href="{{ request.user }}">{{ user.username }}</a>
您应该将其链接到:
<a class="nav-link" href="{{ request.user.username }}">{{ user.username }}</a>
您的路径也会重叠,这意味着您将永远无法访问登录
、注册
或注销
,因为第一条路径将“触发”,其思想是用户名='login'
您最好定义非重叠路径,如:
urlpatterns = [
path('profile/<str:username>/', views.profile, name='profile'),
path('login/', views.login, name='login'),
path('register/', views.register, name='register'),
path('logout/', views.logout, name='logout'),
]
urlpatterns=[
路径('profile/',views.profile,name='profile'),
路径('login/',views.login,name='login'),
路径('register/',views.register,name='register'),
路径('logout/',views.logout,name='logout'),
]
“@Willem Van Onsem”给出了完全正确的答案。但我想补充的一点是防止重叠。您可以重新排列规则,并将该规则放在所有规则的底部。因为django从上到下检查规则,并在找到第一个匹配项时停止匹配
urlpatterns = [
path('login/', views.login, name='login'),
path('register/', views.register, name='register'),
path('logout/', views.logout, name='logout'),
path('<str:username>/', views.profile, name='profile'),
]
urlpatterns=[
路径('login/',views.login,name='login'),
路径('register/',views.register,name='register'),
路径('logout/',views.logout,name='logout'),
路径(“/”,views.profile,name='profile'),
]
事情应该会很顺利。嘿,Williem,谢谢你,有没有什么方法可以不用url上的
profile/
链接到profile页面?@JuanMartinZabala:你不需要在零件前面加profile/
你只需要让路径不重叠就可以了。您可以通过所有可能的方式来实现这一点,例如为login/
、logout/
等添加前缀。因为str:
无论如何都不允许斜杠。但是现在没有人可以在你的网站上登录/注销/注册:)好的,我有一个index.html,它有一个导航栏,它连接到一个css,我可以做什么来扩展模板到其他html而不使用相同的css链接?我需要有组织的一切,所以我想有一个css每html@JuanMartinZabala:您可以将参数传递给模板。但是每个html文件都有一个单独的css文件看起来很奇怪,css文件的想法是“重用”它,否则您可以在
标志中定义样式。urlpatterns
可以,但路径(“/”…
必须是最后一个。Facebook和我的网站Speedy Net上的URL也使用类似的路径。我想你应该在这里警告,用户不能有登录
,注销
,或者注册
为用户名。这实际上是我不建议这样做的原因之一。我还认为路径(“/”,…
是完全合法的模式,但它必须是最后一个。
urlpatterns = [
path('login/', views.login, name='login'),
path('register/', views.register, name='register'),
path('logout/', views.logout, name='logout'),
path('<str:username>/', views.profile, name='profile'),
]