DetailView模板没有显示它的数据

时间:2017-05-24 19:57:03

标签: python django django-models django-templates django-views

在应用程序中我有两个模型,名为Course和Step。每个步骤都属于一个课程,每个课程都有很多步骤。但是,我在创建步骤的详细视图时遇到问题。例如,当我转到网址' http://127.0.0.1:8000/courses/1'它应显示course.objects.get(pk=1)的步骤。然而,我得到的只是当然的页面,即http://127.0.0.1:8000/courses'。

模型

from django.db import models

# Create your models here.
class Course(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length= 255)
    description = models.TextField()

    def __str__(self):
        return self.title

class Step(models.Model):
    title = models.CharField(max_length = 255)
    description = models.TextField()
    order = models.IntegerField()
    course = models.ForeignKey(Course)

    def __str__(self):
        return self.title

地址

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


urlpatterns = [
    url(r'^$', views.course_list),
    url(r'(?P<pk>\d+)/$', views.course_detail)
]

查看

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
from .models import Course, Step

def course_list(request):
    courses = Course.objects.all()
    return render(request, 'courses/course_list.html', {'courses': courses})

def course_detail(request, pk):
    course = Course.objects.get(pk=pk)
    return render(request, 'courses/course_detail.html', {'course': course})

course_detail.html

{% extends 'layout.html' %}
{% block title %}{{course.title}}{% endblock %}
{% block content %}
<article>
    <h2>{{ course.title }} %</h2>
    {{course.description}}
    <section>
        {% for step in course.step_set.all %}
        <h3>{{ step.title }}</h3>
        {{step.description}}
        {% endfor %}
    </section>
</article>
{% endblock %}

主要网址

from django.conf.urls import url, include
from django.contrib import admin
from courses.views import course_list
from django.conf import settings
from django.conf.urls.static import static
from . import views

urlpatterns = [
    url(r'^courses/', course_list),
    url(r'^admin/', admin.site.urls),
    url(r'^$', views.hello_world),
]
if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

我似乎无法识别出错的地方

2 个答案:

答案 0 :(得分:0)

我认为你需要这些url映射..!这应该可以解决问题。

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^applicationName/$', views.ListView.as_view(), name='courses'),
    url(r'^applicationName/(?P<pk>\d+)$', views.CourseDetailView.as_view(), name='course-detail'),
]

答案 1 :(得分:0)

问题出在您的主urls.py文件中 - 此行会将以“courses /”开头的任何网址路径解析为course_list视图:

url(r'^courses/', course_list),

所以Django永远不会到达course_detail视图。相反,您必须“包含”特定于应用程序的URL:

url(r'^courses/', include('myproject.myapp.urls'),

myproject是您的主项目名称,myapp是您的应用名称(请确保您还在INSTALLED_APPS文件的settings.py下注册了您的应用程序)。