如何从templatetag中的模型调用特定的文本字段?

时间:2017-11-06 16:05:40

标签: python django

很抱歉,如果这个问题很无聊,但我只学了一个月的Python / Django。我已经在Google Stack Overflow上搜索并搜索了几个小时,但无法找到解决问题的方法。

我基本上是尝试从TextField解析URL,然后将其呈现在模板中。

到目前为止,我有:

models.py

class Thing(models.Model):
    youtube_link = models.TextField(blank=True, null=True)

我使用以下代码创建了templatetags / embeds.py:

from django import template
from urllib.parse import urlparse
register = template.Library()
from ..models import Thing

@register.simple_tag
def youtube_parse():
    ytparse = urlparse('https://www.youtube.com/watch?v=bnKaOo67mLQ') # URL test
    return yt_parse

在我的html模板中:

{% load embeds %}
{% youtube_parse %}

到目前为止一切顺利。模板显示已解析的URL(虽然它还不是很漂亮)。

但是我遇到的麻烦就是打电话给#34; youtube_link"来自embed.py中的模型Thing。基本上我想要embed.py来做到这一点:

ytparse = urlparse(从模型Thing获取youtube_link并解析它)

但是我在调​​用youtube_link方面遇到了问题。我已经尝试过Thing.youtube_link和我在谷歌搜索一段时间后发现的许多其他代码片段,但似乎没有任何效果。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

一种解决方案是将字符串作为参数传递给youtube_parse方法/过滤器。我不知道您的具体情况,但如果将其与其他答案进行比较,则可能会保存一个数据库查询。我更喜欢这个解决方案:

templatetags/embeds.py

@register.filter
@stringfilter
def youtube_parse(text):
    ytparse = urlparse(text)
    return yt_parse

模板:

{% load embeds %}
{% thing.youtube_link|youtube_parse %}