Django根据存储在视图中的变量显示页面标题

时间:2017-09-30 12:02:06

标签: python django django-views

我有点不知道如何使用相同的模板显示2个页面的标题,这些页面列出了不同类别的文章。我的文章模型有内容,类别(体育,政治,科技等)和地位。我想显示一个列出所有体育文章的页面和一个列出政治的页面,我想使用相同的模板。我已经尝试将标题存储为视图中的变量,但这不起作用

Views.py

 def sport_landing(request):
    page_title = 'Sport'
    cat_landing = Article.objects.filter(status='published', category='sport', published_date__lte=timezone.now()
        ).order_by('-published_date')
    return render(request, "categorylanding.html", {'cat_landing': cat_landing}

模板

   {% extends 'base.html' %}
    {% load humanize %}
    {% block content %}
    <div class="row category-landing-title">
        <div class="col-xs-12">
            {% page_title %}
        </div>
    </div>
.
.
.

这甚至是最好的方法吗?

2 个答案:

答案 0 :(得分:1)

您需要将变量传递给上下文:

def sport_landing(request):
    page_title = 'Sport'
    cat_landing = Article.objects.filter(status='published', category='sport', published_date__lte=timezone.now()
        ).order_by('-published_date')
    return render(request, "categorylanding.html", {'cat_landing': cat_landing, 'page_title':page_title }

并在模板中使用双括号{{% %}用于模板标记):

{{page_title}}

要回答整个模式,您可以避免使用url模式中的参数重复每个类别的代码:

在urls.py文件中添加并修改此行,这样您就可以将类别作为参数传递给视图:

url(r'^category/(?P<category>\w+)', views.cat_landing) # i.e : mysite/category/sport

您需要声明一个通用视图,如:

def cat_landing(request, category=None):
    if category:
        cat_landing = Article.objects.filter(status='published', category=category, 
                                             published_date__lte=timezone.now()
                                      ).order_by('-published_date')

        return render(request, "categorylanding.html", 
                      {'cat_landing': cat_landing, 'page_title':category.title() }
    else:
        return [...redirect to main menu... ]

答案 1 :(得分:0)

将标题作为上下文传递

def sport_landing(request):
    page_title = 'Sport'
    cat_landing=Article.objects.filter(tatus='published',category='sport',published_date__lte=timezone.now()
    ).order_by('-published_date')
    return render(request, "categorylanding.html", {'cat_landing': cat_landing,'page_title':page_title}



        {% extends 'base.html' %}
        {% load humanize %}
        {% block content %}
        <div class="row category-landing-title">
        <div class="col-xs-12">
        {{ page_title }}
        </div>
        </div>