カテゴリのリストとそのカテゴリに基づいた記事のみを表示するカテゴリの詳細ビューを作成するまでのURLを表示するカスタムタグを作成しました。Djangoカスタムタグが機能しなくなった
from blog.models import Category, Entry
from django.shortcuts import render_to_response, get_object_or_404
from django.views.generic import list_detail
#for template tag to display all categories
def all_categories(request):
return render_to_response('category_detail.html', {
'categories': Category.objects.all()
})
def category_detail(request, slug):
"""
object_list
List of posts specific to the given category.
category
Given category.
"""
return list_detail.object_list(
request,
queryset = Entry.objects.filter(categories = Category.objects.filter(slug = slug)),
extra_context = {'category': Category.objects.filter(slug = slug)},
template_name = 'blog/category_detail.html',
)
カテゴリーのURL:
from django.conf.urls.defaults import *
from django.views.generic.list_detail import object_list, object_detail
from blog.views.category import category_detail
from blog.models import Category, Entry
# for category detail, include all entries that belong to the category
category_info = {
'queryset' : Category.objects.all(),
'template_object_name' : 'category',
'extra_context' : { 'entry_list' : Entry.objects.all }
}
urlpatterns = patterns('',
url(r'^$', 'django.views.generic.list_detail.object_list', {'queryset': Category.objects.all() }, 'blog_category_list'),
url(r'^(?P<slug>[-\w]+)/$', category_detail),
)
とカスタムカテゴリタグ:
from django import template
from blog.models import Category
def do_all_categories(parser, token):
return AllCategoriesNode()
class AllCategoriesNode(template.Node):
def render(self, context):
context['all_categories'] = Category.objects.all()
return ''
register = template.Library()
register.tag('get_all_categories', do_all_categories)
また、ここでは、私は、カスタムタグを使用していますどのようにここで
は、カテゴリビューでありますin base.html:
{% load blog_tags %}
<p>
{% get_all_categories %}
<ul>
{% for cat in all_categories %}
<li><a href="{{ cat.get_absolute_url }}">{{ cat.title }}</a></li>
{% endfor %}
</ul>
</p>
ビューにcategory_detailを追加する前に、カスタムタグは正しく:/ categories/newsのようなURLを表示します。ただし、カスタムタグからのすべてのリンクには、あなたの現在のページまたはURLが表示されます。それはカテゴリ名を正しく表示するということです。
URLを取得して再度作業する方法を知っている人はいますか?
import datetime
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
class Category(models.Model):
title = models.CharField(max_length = 100)
slug = models.SlugField(unique = True)
class Meta:
ordering = ['title']
verbose_name_plural = "Categories"
def __unicode__(self):
return self.title
@models.permalink
def get_absolute_url(self):
return ('category_detail',(), {'slug': self.slug })
EDIT::カテゴリーモデルの更新はget_absolute_url、しかし、私の問題を解決しませんでした
EDIT
はここに私のカテゴリモデルであり、多分何かが私はget_absolute_url()で間違っています。また、私が以前にはっきりしなかった場合、カテゴリURLはget_absolute_urlを変更する前でも働いていました。
URLが空であることは間違いありません。私の投稿を私のカテゴリモデル – Raptrex
で更新しました。 'get_absolute_url'の' blog_category_detail'のように 'category_detail'(あなたの質問で参照したビューの名前)が必要です。 –
私はカテゴリモデルのget_absolute_urlでblog_category_detailをcategory_detailに変更しましたが、問題は解決しませんでした。 – Raptrex