Ich benutze Django 1.8 und ich möchte Blog mit Slugs in URLs bauen. Aber mein Code funktioniert nicht.Slug in URL mit CBV in Django 1.8
Hier ist meine Vorlage mit Link Details schreiben:
{% extends "base.html" %}
{% block head_title %}<title>Blog</title>{% endblock %}
{% block content %}
<div class="container">
<h2>Blog</h2>
{% for i in blog %}
<p><b>{{ i.date|date:"D, d M Y" }}</b></p>
<h4><a href="{% url 'projde:blogdetail' slug=i.slug %}">{{ i.title }}</a></h4>
<p>{{ i.text|truncatewords:100 }}</p>
{% if not forloop.last %}
<hr>
{% endif %}
{% endfor %}
</div>
{% endblock %}
Hier mein Modell ist:
class BlogPost(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(max_length=200, unique=True)
text = models.TextField()
date = models.DateTimeField()
is_online = models.BooleanField(default=False)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse("blogdetail", kwargs={"slug": self.slug})
Hier sind alle meine Ansichten in meiner Anwendung, aber in diesem Fall ist das wichtigste der Letzte.
class Home(TemplateView):
template_name = "projde/index.html"
class Projects(ListView):
template_name = "projde/projects.html"
context_object_name = "all_projects"
model = ProjectItem
def get_queryset(self):
return ProjectItem.objects.filter(is_online=True)
class Resume(ListView):
template_name = 'projde/resume.html'
context_object_name = 'resume'
model = ResumeItem
def get_queryset(self):
return ResumeItem.objects.filter(is_online=True)
class Blog(ListView):
template_name = "projde/blog.html"
context_object_name = "blog"
model = BlogPost
def get_queryset(self):
s = BlogPost.objects.all().order_by("-date")
return s
class BlogDetail(DetailView):
model = BlogPost
template_name = "projde/blogdetail.html"
und meine url:
urlpatterns = [
url(r'^$', Home.as_view(), name="home"),
url(r'^projects/$', Projects.as_view(), name="projects"),
url(r'^resume/$', Resume.as_view(), name="resume"),
url(r'^blog/$', Blog.as_view(), name="blog"),
url(r'^blog/(?P<slug>\S+)$', BlogDetail.as_view(), name="blogdetail"),
]
Vielen Dank für die Hilfe, aber ich bekomme einen Fehler: ** Reverse für 'bloddetail' mit Argumenten '()' und Schlüsselwortargumente '{' slug ':' '}' nicht gefunden. 1 Muster versucht: ['blog/(? P \\ S +) $'] ** –
mark
Fertig, bitte überprüfen. – mark
Welche URL verursacht den Fehler? Welche Vorlage zeigen Sie in Ihrer Frage an? – Alasdair