首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django DetailView

Django DetailView
EN

Stack Overflow用户
提问于 2018-06-24 17:14:37
回答 2查看 76关注 0票数 0

我是Django的初学者。我有下面这个简单的django模型(参考下文)。我的列表视图在https://localhost/simpleapp/中工作得很好。然而,当我通过https:local host/simpleapp/1尝试DetailView时,它给出了一个404无法找到。我不知道问题出在哪里,因为我已经用正则表达式^(?P\d+)/$定义了urls。

Model.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
urlpatterns = [
    url(r'^$', views.StudentList.as_view(), name='student_list'),
    url(r'^(?P<pk>\d+)/$', views.StudentDetail.as_view(), name='student_detail'),

]

项目文件夹中的urls.py

代码语言:javascript
复制
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

代码语言:javascript
复制
{% extends 'simpleapp/student_base.html' %}

{% block content %}

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

{% endfor %}

{% endblock %}
EN

回答 2

Stack Overflow用户

发布于 2018-06-24 17:19:28

代码语言:javascript
复制
url(r'^simpleapp/$', include('simpleapp.urls', namespace='simpleapp')),

在这里,Django将匹配所有以simepleapp/开头的^(因为开头的$)和结尾的urls (因为结尾的urls)。

/simpleapp/1与url匹配器不匹配。

相反,请尝试将url更改为

代码语言:javascript
复制
url(r'^simpleapp/', include('simpleapp.urls', namespace='simpleapp')),

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

票数 0
EN

Stack Overflow用户

发布于 2018-06-24 17:19:33

您在模式的末尾有一个包含simpleapp urls的$,这意味着不会再匹配任何内容。所以基本的/simpleapp/ URL可以用,但是后面的就不行了。删除$;只在完整的模式上使用它,而不是包含。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51008494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档