Как сделать ссылку на профиль пользователя на django - PullRequest
2 голосов
/ 30 мая 2020

Я пытался установить ссылку на страницу профиля пользователя, но каждый раз, когда я это делаю, возвращается ошибка 404. Не знаю, но, возможно, ошибка связана с файлом urls.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)

urls.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'),

    ]

index. html

    <a class="nav-link" href="{{ request.user }}">{{ user.username }}</a>

Ответы [ 2 ]

1 голос
/ 30 мая 2020

"@ 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'),
 ]

все должно работать нормально.

1 голос
/ 30 мая 2020

Вы должны связать его с:

<a class="nav-link" href="{{ <b>request.user.username</b> }}">{{ user.username }}</a>

, но лучше было бы использовать тег шаблона {% url &hellip; } [Django -doc] :

<a class="nav-link" href="<b>{% url 'profile' username=request.user.username %}</b>">{{ user.username }}</a>

Ваши пути также перекрываются, это означает, что вы никогда не сможете получить доступ к login, register или logout, так как первый путь будет «срабатывать» с идеей, что username='login'.

Вам лучше определить неперекрывающиеся пути, например:

urlpatterns = [
    path('<b>profile/</b><str:username>/', views.profile, name='profile'),
    path('login/', views.login, name='login'),
    path('register/', views.register, name='register'),
    path('logout/', views.logout, name='logout'),
]
...