【发布时间】:2013-01-05 10:35:56
【问题描述】:
是否可以在没有 javascript 的情况下使 django 模板 URL 感知?
例如,我想在 twitter bootstrap 中将 css 类修改为某个选项卡或药丸的“活动”。
【问题讨论】:
-
我问了一个类似的问题,选择的答案提供了示例代码:stackoverflow.com/questions/10662391/…。我希望这会有所帮助!
是否可以在没有 javascript 的情况下使 django 模板 URL 感知?
例如,我想在 twitter bootstrap 中将 css 类修改为某个选项卡或药丸的“活动”。
【问题讨论】:
如果您在上下文中有 request 可用,那么您可以在模板中使用 request.path 来了解 url 并基于此创建 css 类 active 或 inactive。
您需要在项目设置中的TEMPLATE_CONTEXT_PROCESSORS 中添加django.core.context_processors.request。
或者,只需在请求上下文中传递 page_name 并使用它。
正如arie 指出的那样:检查django-activelink,它基本上似乎使用了我提到的上述方法,但它在顶部添加了一些模板标签。
【讨论】:
是的,您可以这样做,但是生成的模板代码会有点难以阅读。向模板添加大量逻辑会减少/消除 MVC 的关注点分离优势。
您需要做的是将请求信息传递给模板,最简单的方法是添加模板上下文处理器。在你的 settings.py 中添加这样的内容:
from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS
TEMPLATE_CONTEXT_PROCESSORS += (
'django.core.context_processors.request',
)
然后您可以访问模板中的 request.path 信息并构建逻辑以根据您的需要更改输出。
【讨论】: