2013-03-14 85 views

回答

5

有几件事情就明白了:

  1. Django的模板语言是不是真的围绕“实”的编程设计。它的核心是建立字符串。
  2. 它不支持真正的“表达式”。
  3. ...但它支持基本条件和循环。
  4. 所以,虽然你可以检查一个值是否等于或大于或小于另一个值,但你不能做的比这更多。
  5. 除非您使用过滤器或自定义模板标记。
  6. 过滤器可以将值从一个事物转换为另一个事物。
  7. 模板标签可以做更复杂的事情,这超出了这个问题的范围。
  8. 虽然过滤器或自定义模板标签可能会到达您想要去的地方,但它们会过度杀伤。

所以,在我看来,要做到这一点最简单的方法是:

  1. 在你看来,计算当前日期的日子。
  2. 将该值传递给您的模板。
  3. 做一个简单的“如果大于”检查的值传递的对数10

因此,我们的观点看起来是这样的:

def sample_view(request, *args, **kwargs): 
    from datetime import date 
    current_date = date.today() 
    current_day = int(current_date.day) # force a cast to an int, just to be explicit 
    return render_to_response("template", {'day_of_the_month': current_day }) 

而在我们的模板中,我们会更多信息:

{% if day_of_the_month > 10 %} 
    <!-- Stuff to show after the 10th --> 
{% else %} 
    <!-- Stuff to show before the 10th --> 
{% endif %} 

这不暴露的东西到您的模板你可以根据日期出于安全原因被隐藏。 您不应该根据if/then检查来隐藏模板中的安全事物。

如果您需要进行额外的支票,您可以传入current_date,并在数字10中检查current_date.day,而不是在当天特意通过。它不太明确,但更通用,更灵活。

+0

嗨,我已经在模板中使用变量day_of_the_month,但它给了我像2013年3月14日的值,但我只需要只有14天的值,我该如何过滤 – user2106353 2013-03-14 09:08:34

+0

请确保您已通过current_day而不是current_date。 – 2013-03-14 09:24:52

+0

对不起,亲爱的,你是对的,我已经通过了错误的变量,但它现在好好感谢很多 – user2106353 2013-03-14 09:33:23