Python 将计算参数传递给django标记

Python 将计算参数传递给django标记,python,django,python-2.7,django-templates,Python,Django,Python 2.7,Django Templates,我想计算标记的参数,如下所示: {% static /css/{{my_variable_here}}/rest/of/path.css %} return render_to_response('some_page.html', {'STATIC_URL': settings.STATIC_URL}) 这可能吗?或者我需要在视图中计算字符串吗 使用django 1.4(不要质疑)。我记得读过,将模板变量放入选项卡中是绝对不可能的。您也许可以编写一个自定义标记,该标记接受my_variabl

我想计算标记的参数,如下所示:

{% static /css/{{my_variable_here}}/rest/of/path.css %}
return render_to_response('some_page.html', {'STATIC_URL': settings.STATIC_URL})
这可能吗?或者我需要在视图中计算字符串吗


使用django 1.4(不要质疑)。

我记得读过,将模板变量放入选项卡中是绝对不可能的。您也许可以编写一个自定义标记,该标记接受my_variable_here值,就像内置的“url”标记接受参数一样

但在早期,我发现了stackoverflow关于如何解决一些常见的静态文件问题的建议,这些问题促使我这样做:

<link href="{{STATIC_URL}}css/bootstrap.min.css" rel="stylesheet">
“设置”是project settings.py文件,必须导入

显然,通过这个方案,你可以随意添加你的{{my_variable{u here}}变量

2014年9月6日的编辑从这里开始(我必须在这里回复Marcin的第一条评论,以便显示一些代码)@Marcin,我不知道你所说的跨环境可移植性是什么意思。在从Linux开发机器到Linux共享托管生产服务器的简单情况下,我不会遇到这样的问题。我只需下载生产服务器安装程序的副本并将其放在开发服务器的任何目录中,然后在启动virtualenv后,在开发服务器上运行项目---在settings.py文件中更改一个布尔值之后:

IS_PRODUCTION = False
DEBUG = True
if IS_PRODUCTION: DEBUG = False
TEMPLATE_DEBUG = DEBUG
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
PUBLIC_HTML = os.path.dirname(BASE_DIR)
if IS_PRODUCTION:
    EMAIL_BACKEND = 'django_sendmail_backend.backends.EmailBackend'
else:
    EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
if IS_PRODUCTION: ALLOWED_HOSTS = [ u'www.mydomainname.com', u'mydomainname.com']
if not DEBUG and not IS_PRODUCTION: ALLOWED_HOSTS = [ u'127.0.0.1', u'127.0.0.1:8000' ]
STATIC_ROOT = os.path.join(BASE_DIR, 'public/static/')
if IS_PRODUCTION:
    STATIC_URL = 'http://www.mydomainname.com/rb/public/static/'
else:
    STATIC_URL = os.path.join(BASE_DIR, 'public/static/')
STATICFILES_DIRS = (
    os.path.join(PUBLIC_HTML, 'dygraph'),
    os.path.join(PUBLIC_HTML, 'ico'),
    os.path.join(PUBLIC_HTML, 'jquery'),
    .... etc.
)
因此,通过这种方法,我指定了collectstatic从中收集文件到public/static的目录。这就是我对Django自动静态文件安排的依赖程度。请注意,我只需更改第一行中的布尔值即可从开发服务器转到生产服务器(前提是我将STATICFILES\u DIRS保留在与项目根文件夹相同的目录关系中)

但是。。。我有。也就是说,我发现您的问题以前在另一个stackoverflow页面上得到了回答。请注意,3月13日的@rounin指向django文档,但我将提供


我将考虑更改自己的代码,以便使用{%get_static_prefix as static_prefix%},而不是在响应中传输static_prefix。我认为这涵盖了这个主题。

django模板化是一个硬性要求吗?我问这个问题是因为我知道这在Mako上肯定是可能的,但我不确定django的默认模板。@是的,技术上的变化不在讨论范围内。工作中的建议,使用
添加
过滤器吗?@PauloAlmeida非常酷!(虽然有点滥用)
使用django 1.4(不要质疑)
-哈,我仍然支持1.3感谢这一点,但我要解决的问题是,这个方法被破坏了-它不能可靠地跨环境移植。此外,您还可以配置Django以始终在环境中提供静态根:@Marcin,据我所知,static_root只是collectstatic收集到的目录;静态URL是一个URL(除非您在开发服务器上,在这种情况下,您可以将其称为目录)。不管怎样,我刚刚发布了一个编辑,引用了之前的stackoverflow线程——我刚刚找到了它——这可能是你喜欢的。这里是相关的django文档参考[。当所有的人都说了,做了,这种方法似乎是我建议的(
STATIC\u PREFIX
似乎与
STATIC\u URL
相同)。关于这种方法的问题,请参阅本文:如果你在我之前的评论中转到链接到文档,请使用]从“位置”框中URL的末尾转到
get\u static\u prefix
。然后,在它的正上方,可以看到有机会将我的
load static
替换为
load static from staticfiles
。我说的是“注释”插入。我在
get\u static\u prefix
的文档中找不到从
staticfiles>加载后的示例,但它看起来无论如何都能工作。另请参见
user_stylesheet`作为变量传递,不带{{}},就在注释框上方。我想,我用
STATIC\u URL
替换
STATIC\u PREFIX
是无害的。请删掉上面评论的最后一句话(我愚蠢地说的是我自己的代码,不是我上面写的)@Marcin,如果失败了,也许你需要重写静态标记,以获取你的值并将其注册为自定义标记(正如我第一次建议的那样)。