2011-01-04 10 views
0

カテゴリのリストとそのカテゴリに基づいた記事のみを表示するカテゴリの詳細ビューを作成するまでの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を変更する前でも働いていました。

答えて

3

get_absolute_urlは実際には空の文字列を返しています。これにより、リンクが現在のページをリロードします。あなたのHTMLをチェックし、このような何かを探して:

<a href="">Category Title Example</a> 

URLは実際に空白になっている場合は、get_absolute_urlに誤りが存在する可能性があります。テンプレート変数を出力するときにDjangoテンプレートでエラーが発生すると、空の文字列が返されます。 Djangoのシェルからget_absolute_urlを呼び出して試してみて、それが適切に返すかどうかを確認:あなたはblog_category_detailからcategory_detailにビューの名前を変更しますが、get_absolute_url内の参照を更新するのを忘れよう

Category.objects.all()[0].get_absolute_url() 

に見えます。

更新:'category_detail'の逆URL参照が成功するとは思われません。あなたのURLファイルはcategory_detailという名前ではありません。あなたが持つファイルあなたのURLの最後の行を置き換えることによって、URLをapp_name.views.category_detailからget_absolute_urlの参照を変更する必要がありますどちらか(あるいはどこそれが格納されている)、または名前:問題の原因を見つけるには

url(r'^(?P<slug>[-\w]+)/$', category_detail, name='category_detail'), 

、あなたはこれをデバッグする必要がありますコードをコマンドラインから取得します。このようなものは、次のようにする必要があります。

$ python manage.py shell 
>>> from blog.mobels import Category 
>>> cat = Category.objects.all()[0] 
>>> cat.get_absolute_url() 
+0

URLが空であることは間違いありません。私の投稿を私のカテゴリモデル – Raptrex

+1

で更新しました。 'get_absolute_url'の' blog_category_detail'のように 'category_detail'(あなたの質問で参照したビューの名前)が必要です。 –

+0

私はカテゴリモデルのget_absolute_urlでblog_category_detailをcategory_detailに変更しましたが、問題は解決しませんでした。 – Raptrex

関連する問題