2017-08-28 71 views
1

我想以編程方式生成外部URL,而不是在HTML中對它們進行硬編碼,以防其中任何一個應該在某處進行更改如何在模型TextField中的HTML中使用Django模板變量?

在我的模板中,我有這個。

<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) 

我的View類是這樣的。

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://stackoverflow.com' 

而在我的TextField模型中,我有這個。

<a href="{{ external_urls.stack_overflow }}>Stack Overflow</a> 

HTML的那行給出了一個鏈接到https://stackoverflow.com,如果我直接包括在模板中,但如果是在模型文本字段的鏈接進入「http://127.0.0.1:8000/articles/pk/ {{external_urls.stack_overflow}}」。

如何在TextField HTML中轉義模板變量?

+0

你必須在HTML中引用屬性:'href =「{{external_urls.stack_overflow}}」'。請先修復,然後更新你的問題:) – spectras

+0

它不會工作任何方式模板引擎會渲染裏面的變量引號 –

+0

我不知道你想在這裏做什麼。你有django模板代碼保存在模型的'text'字段嗎?如果要插入正確的鏈接,則必須對文本字段的內容進行模板呈現。 –

回答

0

在此:

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':{'stackoverflow.com':'http://www.stackoverflow.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)不能使用與頁面相同的上下文,因此您必須先使用自己的上下文來渲染它。

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://stackoverflow.com' 
     return context 

,並在您的模板只是把{{external_urls}},如果你想創建你可以使用列表或字典許多URL的辭典的例子是:

context['external_urls'] = ['url1':'https://stackoverflow.com', 'url2':'https://facebook.com'] 
在你的模板

和:基於

{{external_urls.url1}} #return stackoverflow.com 
+0

我仍然有同樣的問題,即包含在插入到Django模板中的TextField中的「{{external_urls.url1}}」被視爲字符串而不是模板變量。 – draksi

+0

你作爲一個texfield的男人是什麼,它爲我工作,也許替換[]爲{} –

+0

我的意思是在該對象來自模型的TextField,我在這個TextField,我想要呈現HTML。我解決了它,但原來的帖子解決方案。 – draksi

相關問題