【问题标题】:If statement that will affect the front page of the website?如果声明会影响网站的首页?
【发布时间】:2016-08-19 02:20:35
【问题描述】:
我正在使用 Django。
我有一个客户需要一个白色的容器框来隐藏他们 django 网站每个页面上的内容,除了主页。我是 django 新手,所以我不知道有什么方法可以做到这一点。
我知道在 Wordpress 上有一个 if 语句可以做一些我正在寻找的事情:?php is_front_page(); ?
django 中有什么可以做类似的事情吗?我只需要一种将 CSS 类添加到元素的方法,然后从网站主页中排除该样式。
【问题讨论】:
标签:
django
if-statement
django-templates
frontpage
【解决方案1】:
您可以像这样动态地将 css 类添加到 HTML 元素中:
您需要通过context_data dict 向您的HTML 发送一个值,我们举个例子,我假设您使用的是基于类的视图。
class MyView(TemplateView):
def get_context_data(self, *args, **kwargs):
context = super(MyView, self).get_context_data(*args, **kwargs)
context.update({'add_class': True})
return context
然后在你的模板中:
...
<div class='someclass {{ if add_class }}someotherclass{{endif}}'></div>
【解决方案2】:
这种逻辑属于模板标签。您可以编写自己的模板标签来检查当前页面的 URL 并返回一些字符串,然后您可以将其用作 div 类来设置 div 的样式。
这是一个完整的例子。将以下代码添加到例如templatetags/helpers.py 在您的一个应用程序中:
from django import template
register = template.Library()
@register.simple_tag(takes_context=True)
def is_homepage(context):
if context.request.path == "/":
return "homepage"
else:
return "not_homepage"
将以下代码添加到您的所有模板中,最好是您在所有其他模板中扩展的基本模板:
{% load helpers %}
...
<div class="{% is_homepage %}">
...
</div>
...
您可以在此处阅读有关自定义模板标签的更多信息:
https://docs.djangoproject.com/en/1.9/howto/custom-template-tags/