Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何链接到用户';django的个人资料_Python_Html_Django_Django Views_Django Templates - Fatal编程技术网

Python 如何链接到用户';django的个人资料

Python 如何链接到用户';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

我一直试图链接到用户的个人资料页面,但每次我尝试它,它返回一个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 = {
        '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'),
 ]