Reputation: 1
I am using Django 1.8.3 and Python 3.4, I'm facing the below issue when clicking on a link on my website.
Project Directory:
* 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
My Models:
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})
My 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 %}
Upvotes: 0
Views: 170
Reputation: 47846
Firstly, you have assigned reverse name for courses detail url as Course_detail
in urls.py
but you are using the reverse name as course_detail
in your template. It should have been Course_detail
in the template.
Secondly, you are passing pk
as Course.pk
in your template. It should have been course.pk
instead as you are using course
variable when iterating over courses
objects.
Instead use reverse name with lowercase initial to remove the case-sensitive issues.
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
]
Then in your template, you can do this:
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 %}
Upvotes: 0
Reputation: 3018
Change your template url tag to
{% url 'course_detail' course.id %}
and in your urls.py
url(r'^(?P<pk>[0-9]+)/course/$', views.course_detail, name='course_detail')
Upvotes: 1