【问题标题】:Django templates - is it possible to make url-aware templatesDjango 模板 - 是否可以制作 url-aware 模板
【发布时间】:2013-01-05 10:35:56
【问题描述】:

是否可以在没有 javascript 的情况下使 django 模板 URL 感知?

例如,我想在 twitter bootstrap 中将 css 类修改为某个选项卡或药丸的“活动”。

【问题讨论】:

标签: django django-templates


【解决方案1】:

如果您在上下文中有 request 可用,那么您可以在模板中使用 request.path 来了解 url 并基于此创建 css 类 activeinactive。 您需要在项目设置中的TEMPLATE_CONTEXT_PROCESSORS 中添加django.core.context_processors.request

或者,只需在请求上下文中传递 page_name 并使用它。

正如arie 指出的那样:检查django-activelink,它基本上似乎使用了我提到的上述方法,但它在顶部添加了一些模板标签。

【讨论】:

  • 您可以看看django-activelink,它基本上似乎使用了这种方法并在顶部添加了一些模板标签。
  • @arie 感谢您对评论的提示 +1,我可以将其添加到实际答案中以供将来参考吗?
【解决方案2】:

是的,您可以这样做,但是生成的模板代码会有点难以阅读。向模板添加大量逻辑会减少/消除 MVC 的关注点分离优势。

您需要做的是将请求信息传递给模板,最简单的方法是添加模板上下文处理器。在你的 settings.py 中添加这样的内容:

from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS

TEMPLATE_CONTEXT_PROCESSORS += (
    'django.core.context_processors.request',
)

然后您可以访问模板中的 request.path 信息并构建逻辑以根据您的需要更改输出。

【讨论】:

  • 谢谢!我也考虑过@Aamir Adnan 的回答,但想让它有点健壮。这是一个小应用程序,所以如果我需要使用模板处理器路线,MVC的模糊是可以容忍的。
  • 我和 Aamir 的答案相同,但他的回答要快一些。 :)
  • 我的意思是关于通过 request_context 传递页面。要去测试这个并接受他的答案,因为它是第一个。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2012-01-11
  • 2017-12-30
  • 2011-09-12
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2012-03-20
  • 2014-12-13
相关资源
最近更新 更多