Не удается загрузить шаблон DetailView. URL генерируется неправильно - PullRequest
0 голосов
/ 20 июня 2020

Я новичок в Django и изучаю CBV.

Я использовал Django ', встроенный в класс User, для создания нескольких пользователей на моем веб-сайте, а затем создал следующие представления ниже.

URL-адрес, сгенерированный для моего представления user_list, равен http://127.0.0.1: 8000 / basicapp / user_list / и работает. Он показывает пользователям

URL-адрес, сгенерированный моим представлением user_detail, равен http://127.0.0.1: 8000 / basicapp / 1 / (2,3 ... и так далее) и работает при вводе вручную. Он показывает детали пользователя

Проблема заключается в следующем:

В user_list. html я добавляю: <a href="{{person.id}}" и в url.py я добавляю: url(r'^(?P<pk>[-\w]+)/$',views.UserDetailView.as_view(),name='detail')

Итак, когда страница списка пользователей загружается с моими пользователями в виде ссылок, при наведении курсора на ссылки я получаю такой путь, как:

http://127.0.0.1: 8000 / basicapp / user_list / 1 - эта ссылка не работает. Я нажимаю на нее и ничего не делаю.

Должно получиться:

http://127.0.0.1: 8000 / basicapp / 1 . Эта ссылка работает, потому что я тестировал ее вручную.

Я думаю, что делаю что-то не так в urls.py, но не уверен. Регулярное выражение, которое я взял из обучающего видео, имеет только общее представление о нем.


basicapp/views.py:

from django.contrib.auth.models import User
from django.views.generic import View,TemplateView,ListView,DetailView

class UserView(ListView):
        context_object_name='users'
        model=models.User
        template_name='basicapp/user_list.html'

class UserDetailView(DetailView):
    context_object_name='user_detail'
    model=models.User
    template_name='basicapp/user_detail.html'

basicapp/urls.py:

from django.conf.urls import url
from django.urls import path
from basicapp import views

urlpatterns = [
    url(r'^$',views.index,name='index'),
    url(r'^user_list/',views.UserView.as_view(),name='list'),
    url(r'^(?P<pk>[-\w]+)/$',views.UserDetailView.as_view(),name='detail')

]

user_list. html

user_list.html:
{% extends 'base.html' %}
{% load static %}

{% block title %}
<title>User page</title>
{% endblock title %}

{% block content %}
    <ol>
      {%for person in users %}
          <li><a href="{{person.id}}">{{person}} and {{person.id}}</a></li>
      {%endfor%}
    </ol>
{% endblock content %}

user_detail. html:

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>user_detail</title>
  </head>
  <body>
    <div class="jumbotron">

      <h1>User Profile Page</h1>
      <p>First name : {{user_detail.first_name}}</p>
      <p>Last Name: {{user_detail.last_name}}</p>
      <p>Email: {{user_detail.email}}</p>


    </div>
  </body>
</html>

1 Ответ

0 голосов
/ 20 июня 2020

В вашем шаблоне необходимо использовать тег url со ссылкой на имя URL и любые параметры:

<a href="{% url 'detail' person.id %}">{{person}} and {{person.id}}</a>
...