fbやtwitterのような通知スクロールバーがあります。トップの menu.html は base.html に直接インクルードされており、残念ながらそこでは User メソッドしか使用できません。通知が必要なすべてのビューに書き込まないようにすることはできますか? 1つのビューに一度貼り付けて、ベースにあるトップのmenu.htmlに常駐させたい!
from intarface import
menu_nots
nots = menu_nots(request)
可能です。独自のコンテキスト プロセッサを作成してみてください。
def add_notifications(request):
""" Adds Facebook notifications to the view context. """
return {'notifications': menu_nots(request)}
次に、それを settings.py の TEMPLATE_CONTEXT_PROCESSORS に追加します。
包含タグを使用して問題を解決する最善の方法だと思います: 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>
包含タグの機能は、すべてのページのすべてのリクエストで実行されます
メッセージ%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 %}
TEMPLATE の setting.py 部分に追加context_processors
リストに追加 ->app_name.view.base,