Django urlのネーミングスペースurlの逆解析

2839 ワード

使用方法1:
簡単なニーズ:ブログのホームページの右側にすべての文章の分類をリストし、対応する分類をクリックすると、この分類の下のすべての文章をリストします.
この場合,url逆解析,Djangoにおけるビュー関数ネーミング空間技術を用いる必要がある.
具体的なコード実装はurlsである.pyでapp_を宣言name:
app_name = 'blog'
の後、urlマッチングにnameパラメータを追加します.
url(r'^category/(?P[0-9]+)/$', views.category, name='category'),
category/数値を一致させることができます
htmlで
blogネーミングスペースのcategoryという名前の一致項目をviewsの下のcateory関数に一致させ、category.pkパラメータはcategory関数に渡される
category関数の実装は、次のとおりです.
def category(request, pk):
    cate = get_object_or_404(Category, pk=pk) #            
    post_list = Post.objects.filter(category=cate).order_by('-create_time')
    return render(request, 'blog/index.html', context={'post_list':post_list})
データベースから取得する値に基づいてindexを再レンダリングする.htmlテンプレートは、この分類のすべての文章を手に入れます.
使用法2:
モデルデータテーブルクラスでreverseメソッドを定義するには、次の手順に従います.
class Post(models.Model):
#  
title = models.CharField(max_length=70)
... ...
#'blog:detail',    blog      name=detail    
    #   reverse                 URL,     detail         post/(?P[0-9]+)/        ,
    #                   pk   
    def get_absolute_url(self):
        return reverse('blog:detail', kwargs={'pk': self.pk})

まずindex関数は、データベースから取得した文書リストオブジェクトを返します.
def index(request):
    #order_by          queryset     。         created_time,        。-      
    post_list = Post.objects.all().order_by('-create_time')
    return render(request, 'blog/index.html', context={'post_list':post_list})

indexでhtml内
{% for post in post_list %}

タイトルをクリックすると、Postクラスのget_を呼び出すabsolute_urlメソッド、このメソッドのreverse関数の逆解析
blogネーミングスペースのdetailという名前の解析アイテムを呼び出します.
url(r'^post/(?P[0-9]+)/$', views.detail, name='detail'),
は最終的にviewsを呼び出す.detail関数
def detail(request, pk):
    post = get_object_or_404(Post, pk = pk) #  models reverse     pk         

    post.body = markdown.markdown(post.body,
                                  extensions=[
                                      'markdown.extensions.extra',
                                      'markdown.extensions.codehilite',
                                      'markdown.extensions.toc',
                                  ])
    return render(request, 'blog/detail.html', context={'post':post})

文章の詳細を返すページはmarkdown構文解析をサポートする.