1

innerhalb einer App habe ich zwei Modelle, namens Course und Step. Jeder Schritt gehört zu einem Kurs und jeder Kurs hat viele Schritte. Ich habe jedoch Probleme beim Erstellen einer Detailansicht für Steps. Zum Beispiel, wenn ich zur URL 'http://127.0.0.1:8000/courses/1' gehe, sollte es Schritte für course.objects.get(pk=1) anzeigen. Was ich jedoch zurückbekomme, ist nur die Seite für den Kurs, d. H. http://127.0.0.1:8000/courses '.Detailansicht Vorlage zeigt keine Daten

Modell

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

Ansicht

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

Haupt Urls

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) 

Ich kann einfach nicht zu erkennen scheinen, wo ich schief gelaufen

+0

Ich denke, diese "urls.py" ist die für Ihre "Kurse" App. Was befindet sich in Ihrer Hauptdatei 'urls.py'? –

+0

Gerade meine Haupt-urls.py-Datei hinzugefügt – electro7912

+1

Dort! Das Problem ist, dass Ihr Haupt-'urls.py' das' urls.py' nicht aus der Anwendung enthält, sondern nur jeden Pfad, der mit 'courses /' beginnt, in die 'course_list'-Ansicht auflöst. Ich werde eine Antwort hinzufügen. –

Antwort

0

Das Problem ist in der Haupt urls.py Datei - diese Zeile macht jeden URL-Pfad mit 'Kursen /' beginnend mit der course_list Ansicht beheben:

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

So Django nie die course_detail Ansicht erreichen. Stattdessen müssen Sie „schließen“ die anwendungsspezifischen URLs:

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

Wo myproject Ihr Hauptprojektname, und myapp ist Ihr App-Name (stellen Sie sicher, dass Sie auch unter INSTALLED_APPS Ihre Anmeldung bei Ihrer settings.py Datei registriert).

+0

Brilliant hinzu. Dies scheint zu funktionieren. Danke für alles, was Sie helfen – electro7912

+0

Willkommen bei stackoverflow, eine gute Frage ist die halbe Antwort. –

0

Ich denke, die Sie diese URL-Zuordnungen müssen ..! Dies sollte den Trick machen.

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