Skip to main content
 首页 » 编程设计

python之Django 根据存储在 View 中的变量显示页面标题

2025年02月15日27pander-it

我对如何使用同一模板显示列出不同类别文章的 2 个页面的标题有些困惑。我的文章模型有内容、类别(体育、政治、科技等)和状态。我想显示一个列出所有体育文章的页面和一个列出政治的页面,并且我想使用相同的模板。我曾尝试将标题作为变量存储在 View 中,但这不起作用

View .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> 
. 
. 
. 

这是最好的方法吗?

请您参考如下方法:

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

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 中添加并修改这一行,这将允许您将类别作为参数传递给您的 View :

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

您需要声明一个通用 View ,例如:

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... ]