0

時間が平日の 09:00 から 17:00 の間でない場合、テンプレート (base.html) でブロックを非表示にしたいと考えています。

私は(非常に単純化された)次のようなことを考えていました:

{% if now is 09:00 and 17:00 on weekdays %}

#Show callback form

{% else %}

#We do not answer the phone before 09:00 and after 17:00 

{% endif %}

出来ますか?

4

2 に答える 2

1

フラグを作成することをお勧めしますview.py

import datetime

# In view
now = datetime.datetime.now()
call_us_now = False
if 9 < now.hour < 17:
   call_us_now = True

# Send 'call_us_now' to context

.

{# In template #}
{% if call_us_now %}
    {# Show callback form #}
{% else %}
    {# We do not answer the phone before 09:00 and after 17:00 #}
{% endif %]
于 2013-04-25T12:23:10.193 に答える
1

このコードを base.html で使用したいので、すべてのビューにコードを実装するのは少し難しいでしょうか?

カスタムを書きますtemplate context processor。これを出発点として使用できます。

from datetime import datetime, time

from django.conf import settings

def calling_flag(request):
    """ Sets the flag in the template if the current time is between CALL_HOURS """
    if settings.CALL_HOURS:
        now = datetime.now().time()
        start_time,end_time = settings.CALL_HOURS
        start_time = time(start_time[:2],start_time[-2:])
        end_time = time(end_time[:2],end_time[-2:])
        return {'IN_TIME': start_time <= now <= end_time}

アプリ内のファイルに保存します。アプリが という名前で、ディレクトリ内のfeedbackというファイルに上記のコードを配置したとします。次のステップでは、それを に追加します:custom_template_flags.pyfeedbacksettings.py

TEMPLATE_CONTEXT_PROCESSORS = (
    # -- your other context processors
    'feedback.custom_template_flags.calling_flag',
)

最後に、再び時間範囲を追加しますsettings.py

CALL_HOURS = ('0900','1700')

これで、すべてのテンプレート{{ IN_TIME }}にどちらかTrueまたはのいずれかが含まれますFalse

于 2013-04-25T14:42:25.803 に答える