在base.html django中查看

时间:2012-07-17 14:30:42

标签: python django view

我在fb或twitter上有通知滚动条。顶部menu.html直接包含在base.html Unfortunatelly中,我只能在那里使用User方法。是否有可能不在每个视图中写入我需要通知的内容?我想一次粘贴到一个视图中,并将它始终放在top.html中的顶部menu.html中。

from intarface import menu_nots

nots = menu_nots(request)

4 个答案:

答案 0 :(得分:1)

有可能。试试writing your own context processor

def add_notifications(request):
    """ Adds Facebook notifications to the view context. """
    return {'notifications': menu_nots(request)}

接下来,将它添加到settings.py中的TEMPLATE_CONTEXT_PROCESSORS中。

答案 1 :(得分:0)

我认为使用包含标记解决问题的最佳方法是: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#inclusion-tags

@register.inclusion_tag('menu.html')
def show_menu():
    #menu logic2
base.html中的

<html>
    ...
    {% show_menu %}
    ...
</html>

包含标记的功能将在每个页面上的每个请求上运行

答案 2 :(得分:0)

使用messages%username%!

视图

from django.contrib import messages

messages.add_message(request, messages.INFO, 'Hello world.')
messages.debug(request, '%s SQL statements were executed.' % count)
messages.info(request, 'Three credits remain in your account.')
messages.success(request, 'Profile details updated.')
messages.warning(request, 'Your account expires in three days.')
messages.error(request, 'Document deleted.')

模板

{% if messages %}
    <ul class="messages">
    {% for message in messages %}
        <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

答案 3 :(得分:0)

添加到TEMPLATE的setting.py部分中,并追加到context_processors列表-> app_name.view.base,