使用Admin中的Django变量

时间:2014-05-30 02:31:29

标签: python django variables django-admin

我还没能找到答案,因为常用词在搜索引擎中会返回很多不相关的答案。

如何在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 ..

3 个答案:

答案 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从您的视图传递到模板?