Django变量在标题部分中不可见

时间:2017-07-25 19:59:14

标签: python django python-3.5

我有一个基本的博客开始,它列出了post_list.html中从header.html扩展的数据库中的博客文章。我也试图在标题中得到一个变量作为口号,但这不起作用。

header.html - 这是在没有" propaganda.slogan"的情况下呈现的。从管理页面输入并具有内容:

<!DOCTYPE html>
  <html lang="en">
  <head>
    <title>hey!</title>
    <meta charset="utf-8" />
    {% load staticfiles %}
    <link rel="stylesheet" href="{% static 'blog/css/bulma.css' %}"      type="text/css"/> 
  </head>    
  <body>
    <section class="hero is-success is-bold">
        <div class="hero-body">
            <div class="container">
                {% block slogan %}
                    <ul>
                    {% for propaganda in propagandas %}
                        <li>{{ propaganda.slogan }}</li>
                    {% endfor %}
                    </ul>       
                {% endblock %}
                <h1 class="title">
                    My weblog
                </h1>
            </div>
        </div>
    </section>
    {% block content %}
    {% endblock %}
</body>
</html>

post_list.html扩展了header.html并显示来自models.py的帖子列表:

{% extends "blog/header.html" %}
{% block content %}
    {% for post in posts %}
        <section class="section">
            <div class="container">
                <h1 class="title"><a href="#">{{ post.title }}</a></h1>
                <p>{{ post.summary|linebreaksbr }}</p>
                <p>published: {{ post.last_edited }}</p>
            </div>
        </section>
    {% endfor %}    
{% endblock %}

models.py看起来像这样:

from django.db import models
from django.utils import timezone

# Create your models here.
class Propaganda(models.Model):
    slogan = models.CharField(max_length=140, blank=True, null=True)

    def __str__(self):
        return self.slogan


class Post(models.Model):
    title = models.CharField(max_length=140, blank=False, null=False)
    content = models.TextField()
    summary = models.CharField(max_length=500)
    created_date = models.DateTimeField()
    last_edited = models.DateTimeField()

    def __str__(self):
        return self.title

最后,views.py是:

from django.shortcuts import render
from .models import Post, Propaganda

# Create your views here.
def post_list(request):
    posts = Post.objects.all()
    return render(request, 'blog/post_list.html', {'posts': posts})

def header(request):
    propagandas = Propaganda.objects.all()
    return render(request, 'blog/header.html', {'propagandas': propagandas})

那么为什么我可以在post_list.html中获得帖子标题,摘要和日期的列表,但我无法在标题中获得宣传标语列表?

对我来说,它几乎就像是相同的代码?

我从开发服务器或浏览器中得不到任何错误:(

1 个答案:

答案 0 :(得分:2)

您需要将传播列表传递给当前模板的上下文;包含模板与关联的(如果首先有任何意义)视图中包含的模板几乎没有任何关系:

def post_list(request):
    posts = Post.objects.all()
    propagandas = Propaganda.objects.all()
    return render(request, 'blog/post_list.html', {'posts': posts, 'propagandas': propagandas})