2017-05-24 10 views
1

アプリ内には、CourseとStepという2つのモデルがあります。すべてのステップはコースに属し、各コースには多くのステップがあります。しかし、私はステップの詳細ビューを作成する際に問題が発生しています。たとえば、私がURL「http://127.0.0.1:8000/courses/1」に行くと、course.objects.get(pk=1)のステップが表示されます。しかし、私が元に戻すのはもちろんのことです。すなわち、http://127.0.0.1:8000/courses 'です。DetailViewテンプレートにデータが表示されない

モデル

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 

のURL

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 %} 

のメインのURL

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) 

私はちょうど私が、私はあなたがこれらのURLのマッピングが必要だと思う

+0

私はこの 'urls.py'があなたの「コース」アプリケーション用のものだと思います。メインの 'urls.py'ファイルには何がありますか? –

+0

私のメインurls.pyファイル – electro7912

+1

が追加されました!問題は、メインの 'urls.py'がアプリケーションからの' urls.py'を含んでいないことです。 'courses /'で始まるすべてのパスを 'course_list'ビューに解決しているだけです。私は答えを追加します。 –

答えて

0

問題はあなたのメインのurls.pyファイルである - この行は「コース/」で始まる任意のURLパスを作るcourse_listビューに解決:

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

ので、Djangoはcourse_detailビューに到達することはありません。代わりに、アプリケーション固有のURL「が含まれる」必要があります。

myprojectはあなたのメインのプロジェクト名で、 myappは(あなたもあなたの settings.pyファイルで INSTALLED_APPS下にアプリケーションを登録してください)アプリの名前です
url(r'^courses/', include('myproject.myapp.urls'), 

+0

Brilliantの前に詳細を見るには、あなたのurls.pyにコースを追加してください。これはうまくいくようです。あなたが助けてくれてありがとう – electro7912

+0

ようこそstackoverflow、良い質問の半分の答えです。 –

0

を間違っていた場所を認識するように見えることはできません...!これはトリックを行う必要があります。

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