繁体   English   中英

Django的DetailView

[英]Django DetailView

我是Django的初学者。 我有以下简单的Django模型(请参阅下文)。 我的列表视图在https:// localhost / simpleapp /中运行良好 但是,当我通过https:local host / simpleapp / 1尝试DetailView时,它给了我404错误。 我不知道问题出在哪里,因为我已经用正则表达式^(?P \\ d +)/ $定义了网址。

模型

class University(models.Model):
    university_name = models.CharField(max_length = 50)

    def __str__(self):
        return self.university_name

class Student(models.Model):
    last_name = models.CharField(max_length = 50)
    first_name = models.CharField(max_length = 50)
    age = models.PositiveIntegerField()
    university = models.ForeignKey(University, on_delete=True)

    def __str__(self):
        return '{} {}'.format(self.first_name, self.last_name)

Views.py

class StudentList(generic.ListView):
    model = models.Student
    context_object_name = 'student_list'
    template_name = 'simpleapp/student_list.html'


class StudentDetail(generic.DetailView):
    model = models.Student
    context_object_name = 'student_detail'
    template_name = 'simpleapp/student_detail.html'

应用程序文件夹中的urls.py

urlpatterns = [
    url(r'^$', views.StudentList.as_view(), name='student_list'),
    url(r'^(?P<pk>\d+)/$', views.StudentDetail.as_view(), name='student_detail'),

]

项目文件夹中的urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^$', views.Index.as_view(), name='index' ),
    url(r'^simpleapp/$', include('simpleapp.urls', namespace='simpleapp')),
]

student_detail.html

{% extends 'simpleapp/student_base.html' %}

{% block content %}

<h1> {{student_detail}}</h1>

{% endfor %}

{% endblock %}
url(r'^simpleapp/$', include('simpleapp.urls', namespace='simpleapp')),

在这里Django将匹配所有以simepleapp/ (由于^开头)和以simepleapp/结束(由于$结束)的url。

网址匹配器未匹配/simpleapp/1

相反,尝试将网址更改为

url(r'^simpleapp/', include('simpleapp.urls', namespace='simpleapp')),

这样,任何以simepleapp开头的simepleapp都将被匹配

模式结尾处有一个$ ,其中包含simpleapp网址,这意味着将不再匹配任何内容。 因此,基本的/ simpleapp / URL可以使用,但此后的任何操作都无效。 删除该$; 仅用于完整模式,不包括在内。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM