如何在模型 TextField 的 HTML 中使用 Django 模板变量?
Posted
技术标签:
【中文标题】如何在模型 TextField 的 HTML 中使用 Django 模板变量?【英文标题】:How can I use a Django template variable in HTML in a model TextField? 【发布时间】:2018-02-05 12:04:04 【问题描述】:我想以编程方式生成外部 url,而不是在 html 中硬编码它们,以防它们中的任何一个在某个时候发生变化
在我的模板中有这个。
<p>
article.text|safe
</p>
我的文章类是这样的。
class Article(models.Model):
title = models.CharField(max_length=200)
teaser = models.TextField(default = "")
text = models.TextField()
category = models.CharField(max_length=100)
image_name = models.CharField(default = "", max_length=100)
published_date = models.DateField(blank=True, null=True)
我的视图类是这样的。
class Article_Page(TemplateView):
model = Article
template_name="articles/article.html"
def get_context_data(self, **kwargs):
context = super(Article_Page,self).get_context_data(**kwargs)
context['article'] = Article.objects.get(pk=kwargs['pk'])
context['external_urls'] = External_Urls()
return context
class External_Urls(object):
stack_overflow = 'https://***.com'
在我的模型中的 TextField 中我有这个。
<a href=" external_urls.stack_overflow >Stack Overflow</a>
如果我将它直接包含在模板中,那一行 HTML 将提供指向 https://***.com 的链接,但如果它在模型 TextField 中,则链接将转到 'http://127.0.0.1:8000/articles/pk/ external_urls.stack_overflow '。
如何在 TextField HTML 中转义模板变量?
【问题讨论】:
您必须在 HTML 中的属性周围加上引号:href=" external_urls.stack_overflow "
。请先解决这个问题,然后更新您的问题:)
模板引擎将在引号内呈现变量的任何一种方式都不起作用
我不确定你想在这里做什么。您的模型的text
字段中是否保存了 django 模板代码?如果要插入正确的链接,则必须对文本字段的内容进行模板渲染。
这是你想做的吗? ***.com/questions/11874325/…
@ArpitSolanki> 肯定会的。问题不在于渲染,问题在于没有引号你会得到无效的 html。浏览器会尝试给它一个含义,但你不能确定如何。
【参考方案1】:
试试
class Article_Page(TemplateView):
model = Article
template_name="articles/article.html"
def get_context_data(self, **kwargs):
context = super(Article_Page,self).get_context_data(**kwargs)
context['article'] = Article.objects.get(pk=kwargs['pk'])
context['external_urls'] = 'https://***.com'
return context
在你的模板中放external_urls
,如果你想创建很多url,你可以使用列表或字典,字典的例子是:
context['external_urls'] = ['url1':'https://***.com', 'url2':'https://facebook.com']
在你的模板中:
external_urls.url1 #return ***.com
【讨论】:
我仍然有同样的问题,“external_urls.url1”包含在插入到 django 模板中的 TextField 中时,被视为字符串而不是模板变量。 你是个 texfield 的人,它对我有用,也许将 [] 替换为 我的意思是对象来自的模型中的 TextField,我在这个 TextField 中有我想要呈现的 HTML。我解决了它,原帖中的解决方案。【参考方案2】:基于此:
class Article_Page(DetailView):
model = Article
template_name="articles/article.html"
def get_context_data(self, **kwargs):
context = super(Article_Page, self).get_context_data(**kwargs)
d = 'external_urls':'***.com':'http://www.***.com/'
rendered = Template(self.object.text).render(Context(d))
context['article'] = self.object
context['article_text_rendered'] = rendered
return context
然后在 HTML 中:
<p>
article_text_rendered
</p>
这里的关键是TextField中的HTML(即article.text和page_object.text)不能使用与页面相同的上下文,所以你必须先用它自己的上下文来渲染它。
【讨论】:
以上是关于如何在模型 TextField 的 HTML 中使用 Django 模板变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何在swift中使基类属性通用,以便可以与多种模型类型一起使用?