django访问其他应用程序变量

时间:2014-01-28 09:30:36

标签: django

如何才能访问其他应用中的变量,例如我有/ posts / / polls / ...

如果我想从/ polls / app访问特定变量,是否可能以及如何?

当我尝试像{{ poll.question }}那样访问时,它什么也没做 /blog/index.html

<div class="news">  
    {{ poll.question }}
</div>

/polls/index.html

{% extends "blog/index.html" %}
{% block poll %}
    {% if latest_poll_list %}
        <ul>
            {% for poll in latest_poll_list %}
                <li><a href="{% url 'polls:detail' poll.id %}">{{ poll.question }}</a></li>
            {% endfor %}
        </ul>
    {% else %}
        <p>No polls are available.</p>
    {% endif %}
{% endblock %}

2 个答案:

答案 0 :(得分:1)

可以这样做,但不能在模板中完成。它在view函数中完成,并通过context传递给模板,然后像任何其他python模块/变量一样导入它。

# in posts.views
from polls.models import Poll

def index_view(request):
    context = {'latest_poll_list': Poll.objects.all()[:5]} # Or whatever...
    return render(request, 'index.html', context)

答案 1 :(得分:1)

有几种方法可以做到:

  • 将查询集传递给render函数中的上下文。或者如果您使用CBV
  • ,则在get_context_data()中
  • 也许你想要这个轮询列表有多个视图,所以你可以编写一个Mixin,如果你使用的是CBV,它会覆盖get_context_data以在上下文中添加latest_poll_list var。这应该更容易维护。
  • 或者,如果几乎所有视图都需要此轮询列表,您可以编写一个上下文处理器,将您的变量放在所有模板中,
  • 或者您可以创建自己的模板标签以显示民意调查列表

我会选择第二个