2015-08-01 5 views
0

Я использую Django 1.8.3 и Python 3.4, я сталкиваюсь с проблемой ниже при нажатии на ссылку на моем веб-сайте.Ошибка Django NoReverseMatch

Это страница ошибки: Каталог
http://imgur.com/4HKlahP

Проект:

* cacademy: 
    * __pycache__ 
    * __init__ 
    * settings 
    * urls 
    * wsgi 
* Classes: 
    * __pycache__ 
    * migrations 
    * static 
    * __init__ 
    * admin 
    * models 
    * tests 
    * urls 
    * views 
* templates: 
    * cacademy: 
     * base.html 
     * classes_list.html 
     * courses_detail.html 
* db.sqlite3 
* manage.py 

Мои модели:

from django.db import models 
from django.utils import timezone 


class Course(models.Model): 
    title = models.CharField(max_length=200) 
    text = models.TextField() 
    teachername = models.TextField(max_length=200) 
    teacherinfo = models.TextField() 
    started_date = models.DateTimeField(default=timezone.now) 

    def __str__(self): 
     return self.title 

My Views:

from django.shortcuts import render 
from django.utils import timezone 
from .models import Course 
from django.shortcuts import render, get_object_or_404 

def classes_list(request): 
    courses = Course.objects.filter(started_date__lte=timezone.now()).order_by('started_date') 
    return render(request, 'cacademy/classes_list.html', {'courses': courses}) 

def course_detail(request, pk): 
    course = get_object_or_404(Course, pk=pk) 
    return render(request, 'cacademy/courses_detail.html', {'course': course}) 

Мои Urls:

from django.conf.urls import include, url 
from Classes import views 
from django.contrib import admin 
admin.autodiscover() 

urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^$', views.classes_list, name='classes_list'), 
    url(r'^(?P<pk>[0-9]+)/Course/$', views.course_detail, name='Course_detail'), 
    ] 

classes_list.html:

{% extends "cacademy/base.html" %} 
{% load staticfiles %} 
{% block content %} 
     <div> 
      <h2> Remember you can only register 3 Courses at once!</h2> 
     </div> 
    {% for course in courses %} 
     <div course="post"> 
       <div course="date"> 
        {{ course.started_date }} 
       </div> 
      <h1><a href="{% url 'course_detail' pk=Course.pk %}">{{ course.title }}</a></h1> 
      <p>Taught by: {{ course.teachername|linebreaks }}</p> 
     </div> 
    {% endfor %} 
{% endblock content %} 

ответ

1

Измените свой шаблон URL тег в

{% url 'course_detail' course.id %} 

и в вашей urls.py

url(r'^(?P<pk>[0-9]+)/course/$', views.course_detail, name='course_detail') 
0

Во-первых , вы назначаете ed обратное имя для учебных курсов подробно url как Course_detail в urls.py, но вы используете обратное имя как course_detail в своем шаблоне. В шаблоне должно было быть Course_detail.

Во-вторых, вы проходите pk как Course.pk в вашем шаблоне. Это должно было быть course.pk вместо этого, поскольку вы используете переменную course при итерации над courses объектами.

Вместо этого используйте обратное имя с нижним регистром, чтобы удалить вопросы, чувствительные к регистру.

urls.py

from django.conf.urls import include, url 
from Classes import views 
from django.contrib import admin 
admin.autodiscover() 

urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^$', views.classes_list, name='classes_list'), 
    url(r'^(?P<pk>[0-9]+)/Course/$', views.course_detail, name='course_detail'), # assign reverse name with lowercase initial letter 
    ] 

Затем в шаблоне, вы можете сделать это:

classes_list.html

{% extends "cacademy/base.html" %} 
{% load staticfiles %} 
{% block content %} 
     <div> 
      <h2> Remember you can only register 3 Courses at once!</h2> 
     </div> 
    {% for course in courses %} 
     <div course="post"> 
       <div course="date"> 
        {{ course.started_date }} 
       </div> 
      <h1><a href="{% url 'course_detail' pk=course.pk %}">{{ course.title }}</a></h1> 
      <p>Taught by: {{ course.teachername|linebreaks }}</p> 
     </div> 
    {% endfor %} 
{% endblock content %} 
Смежные вопросы