Django - 当我扩展index.html时,我没有得到变量

时间:2012-09-03 07:40:49

标签: python django django-templates django-views

我为它写了一个index.html和一个views.py。我得到了日期并将月份数据转换为口头,如下所示。它适用于索引页面,但是当我从其他页面扩展索引页面时,日期不会出现。

def index(request):

    datenow = date.today()
    datemonth = date.today().month
    if datemonth == 8:
        date_month="Ağustos"
    elif datemonth == 9:
        date_month = "Eylül"
    elif datemonth == 10:
        date_month = "Ekim"
    elif datemonth == 11:
        date_month ="Kasım"
    elif datemonth == 12:
        date_month ="Aralık"
    elif datemonth == 1:
        date_month ="Ocak"
    elif datemonth == 2:
        date_month ="Şubat"
    elif datemonth == 3:
        date_month ="Mart"
    elif datemonth == 4:
        date_month ="Nisan"
    elif datemonth == 5:
        date_month ="Mayıs"
    elif datemonth == 6:
        date_month ="Haziran"
    elif datemonth == 7:
        date_month ="Temmuz"

    news = New.objects.all()[:10]
    programs= Program.objects.filter(date=date.today())
    print date.today()
    print date_month
    template = "index.html" 
    context = {'news':news,
               'programs':programs,
               'datenow':datenow,
               'date_month':date_month}
    return render_to_response(template,context,context_instance=RequestContext(request))

3 个答案:

答案 0 :(得分:7)

如果您想在每个页面中使用此日期和时间,则必须使用Django上下文处理器Link Here

def datetime(request):

    datenow = date.today()
    datemonth = date.today().month
    if datemonth == 8:
        date_month="Ağustos"
    elif datemonth == 9:
    date_month = "Eylül"
    elif datemonth == 10:
        date_month = "Ekim"
    elif datemonth == 11:
    date_month ="Kasım"
    elif datemonth == 12:
        date_month ="Aralık"
    elif datemonth == 1:
        date_month ="Ocak"
    elif datemonth == 2:
        date_month ="Şubat"
    elif datemonth == 3:
        date_month ="Mart"
    elif datemonth == 4:
        date_month ="Nisan"
    elif datemonth == 5:
        date_month ="Mayıs"
    elif datemonth == 6:
        date_month ="Haziran"
    elif datemonth == 7:
        date_month ="Temmuz"


context = {'datenow':datenow,'date_month':date_month}
return context
在settings.py

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.request',
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    'django.core.context_processors.static',
    'django.contrib.messages.context_processors.messages',
    'django.core.context_processors.csrf',
    # Custom Context Proccessors
    'apps.your-app.context_processor.datetime',


)

然后在HTML文件中,您可以使用

{{ datenow }}{{ date_month }}

答案 1 :(得分:0)

据我所知。你有一个从另一个页面延伸的页面。但是另一页没有显示继承的数据。

这只是因为index.html是从views.py调用的。变量和更新从view.index()

发送

当另一个页面继承index.html时,它不会更新日期只是因为它是由另一个函数处理而不是views.index()(我希望我的想法在这里很清楚)。

一个简单的解决方案就是复制views.index的内容并将变量再次发送到新的html模板。

答案 2 :(得分:0)

如果我理解你的问题,那么我认为你假设扩展index.html页面还扩展了def index(request)定义的视图。不幸的是,您必须在每个视图中提供日期变量,因为模板index.html仅提供了以html格式查看变量的方法。

这不是在每个视图中重复日期格式代码,而是自定义模板过滤器的好例子。看看将上面的索引函数转换为模板标签(请参阅https://docs.djangoproject.com/en/dev/howto/custom-template-tags/),然后您可以在视图中设置日期,例如。

def my_other_view(request):
    context = {'date': my_date }

然后在您的模板文件中,您可以像这样构建使用my_date_template_filter

{extend 'index.html'}

{% block content %}
    {{ my_date|my_date_template_filter}}
{% endblock %}

当然,您必须定义上面链接中定义的自定义模板过滤器。