将变量从Django中的下拉列表传递给模板

时间:2013-04-19 08:08:31

标签: django templates variables drop-down-menu views

我在Django中有一个小项目(仍在学习它和Python)并且有一些关于在Django中传递变量的问题。

例如,用户输入一些数据,项目处理它,然后计算一些简单的统计数据。我想通过下拉按钮传递“年”变量,以便用户可以选择应该生成报告的年份。

代码的某些部分:

Models.py:

class Fms(models.Model):
...
date = models.DateField()
department = models.CharField(max_length=255, verbose_name='Department')

Views.py:

def raport(request):
raport = Fms.objects.filter(date__year='2013').extra(select={'month': "EXTRACT(month FROM date)"}).values('month', 'department').order_by('month').annotate(Count('department'))
return render_to_response ('fmstat/raport.html',
                           {'raport': raport},
                           context_instance=RequestContext(request))

测试按钮:

<div class="bs-docs-example">
    <ul class="nav nav-pills">
        <li class="dropdown">
            <a class="dropdown-toggle" id="drop4" role="button" data-toggle="dropdown" href="#">Select year for report <b class="caret"></b></a>
            <ul id="menu1" class="dropdown-menu" role="menu" aria-labelledby="drop4">
                <li role="presentation"><a role="menuitem" tabindex="-1" href="{% url 'fmstat.views.raport' %}">2012</a></li>

那我该怎么做呢?通过URL传递它还是有另一种更简单的方法?

此致

1 个答案:

答案 0 :(得分:2)

更新您的网址格式以捕获年份,更新您的视图以将年份作为参数,并更新您的模板以构建包含年份的网址:

# urls.py
urlpatterns = ('',
   url(r'^raport/(?<year>\d{4})/?', "fmstat.views.raport"),
   # ...
   )

# views.py 
def raport(request, year):
    raport = Fms.objects.filter(date__year=year).extra(...)
    # ...

# template.html
 (...)
 <li role="presentation">
    <a role="menuitem" tabindex="-1" 
        href="{% url 'fmstat.views.raport' '2012' %}">2012</a>
 </li>