我还没能找到答案,因为常用词在搜索引擎中会返回很多不相关的答案。
如何在Django管理部分中使用Django变量和{% url %}
标记?
我想输入以下内容:
{{ object.property }}
{{ STATIC_URL }}
{% url %}
但是这些值没有出现在渲染模板中。感谢任何想法!
澄清一下:我想在Django Admin后端的一个字段中输入一个django变量,并将其值反映在渲染模板中。
有问题的观点:
def blog_detail(request, slug):
blog = get_object_or_404(Blog, slug=slug)
return render(request, 'template.html', {'object':blog})
模型属性:
class Blog(models.Model):
name = models.CharField(max_length=50)
date = models.DateTimeField()
slug = models.SlugField()
is_published = models.BooleanField()
article = models.TextField()
description = models.TextField()
enable_comments = models.BooleanField("Enable comments", default=True)
thumbnail = models.ImageField(upload_to='img/', null=True, blank=True)
preview_location = models.CharField(max_length=100, null=True, blank=True)
preview_name = models.CharField(max_length=50, null=True, blank=True)
def __unicode__(self):
return self.name
def get_absolute_url(self):
return reverse('blog_detail', kwargs={'slug': self.slug})
所以问题是我想在preview_location
中输入一个django变量,因为根据我当前正在查看的特定Blog
条目,位置会有所不同。每个Blog
条目都有自己的preview_location
..
答案 0 :(得分:0)
你可以创建"渲染"模板过滤器并在模板中使用它,并像
一样使用它 {{ object.description|render }}
答案 1 :(得分:0)
您需要create a custom tag or a custom filter创建一个Template
渲染器对象,使用您想要访问的每个变量填充上下文并从字符串中渲染模板。一个简单的过滤器可能是:
from django.template import Context, Template
from django.conf import settings
@register.filter
def render_string(string_tpl):
tpl = Template(string_tpl)
data = {"settings": settings, "another_stuff": 42}
return tpl.render(Context(data))
然后你可以使用它(一旦加载了这个新过滤器):
{{ "My media URL is {{ settings.MEDIA_URL }}"|render_to_string }}
{{ your_tpl_string|render }}
正如在评论中讨论的那样,您可以通过创建simple tag来传递其他对象以放入上下文:
@register.simple_tag
def render_string(string_tpl, *args, **kwargs):
tpl = Template(string_tpl)
data = {"settings": settings}
data.update(kwargs) # add every additional items passed
return tpl.render(Context(data))
并使用它:
{% render_string "My media URL is {{ settings.MEDIA_URL }}" %}
{% render_string "My media URL is {{ settings.MEDIA_URL }}, and my funny object: {{ object.name }}" object=object_in_cur_context %}
答案 2 :(得分:0)
所以,假设您假设有一个名为obj
的模型实例,其中有一个名为content
的字段,其中存储了一些django模板术语,如下所示:
{{ object.property }}
{{ STATIC_URL }}
{% url %}
您可以使用Template
对象并只渲染该内容
from django.template import Template
tpl = Template(obj.content)
rendered_content = tpl.render({'a' : 123, 'b' : 456}) #variables?
但你怎么知道要传递哪些变量?
也许您将请求上下文和obj
实例作为dict传递?
from django.template import Template
from django.template import RequestContext
context = RequestContext(request, {'obj': obj})
tpl = Template(obj.content)
rendered_content = tpl.render(context)
然后将rendered_content
从您的视图传递到模板?