【发布时间】:2011-07-25 00:24:58
【问题描述】:
我正在使用 twitter API 并显示推文列表。我想将我的应用程序中的用户名和主题标签链接到适当的位置,但我所拥有的只是一个带有 @ 和 # 符号的字符串。
有没有办法通过django模板我可以说“如果变量包含一个以#开头的单词,用”包围它?
或者我应该使用 Javascript 来做到这一点吗?
任何方法都会有所帮助。
【问题讨论】:
标签: jquery python django twitter
我正在使用 twitter API 并显示推文列表。我想将我的应用程序中的用户名和主题标签链接到适当的位置,但我所拥有的只是一个带有 @ 和 # 符号的字符串。
有没有办法通过django模板我可以说“如果变量包含一个以#开头的单词,用”包围它?
或者我应该使用 Javascript 来做到这一点吗?
任何方法都会有所帮助。
【问题讨论】:
标签: jquery python django twitter
我不确定在不创建自己的过滤器的情况下在模板本身内进行处理,但是您可以使用 python 在控制器中处理它吗?带有正则表达式的基本形式:
import re
user_pattern = re.compile('(\s|^)(@)(\w+)(\s|$)')
tweet = 'Hey @pssdbt, thats not what I wanted!'
tweet = user_pattern.sub('\1<a href="http://www.twitter.com/\3">\2\3</a>\4', tweet)
这应该导致:
'hey <a href="http://www.twitter.com/pssdbt">@pssdbt</a>, thats not what i wanted!'
同样的方法也适用于主题标签。不过,我认为用 javascript 处理也不会太难。
更新/作为自定义过滤器:
根据http://docs.djangoproject.com/en/dev/howto/custom-template-tags/,您只需创建一个名为 your_app/templatetags/twittify.py 的文件
在该文件中,添加:
from django import template
from django.utils.html import conditional_escape
from django.utils.safestring import mark_safe
import re
register = template.Library()
@register.filter(name='twittify')
def twittify(tweet, autoescape=None):
tweet = conditional_escape(tweet)
user_pattern = re.compile('(\s|^)(@)(\w+)(\s|$)')
tweet = user_pattern.sub('\1<a href="http://www.twitter.com/\3">\2\3</a>\4', tweet)
return mark_safe(tweet)
twittify.needs_autoescape = True
然后在你的模板中,你应该可以使用这样的东西(假设这是它的样子):
<ul id="tweets">
{% for tweet in tweets %}
<li>{{ tweet | twittify }}</li>
{% endfor%}
</ul>
我以前从未使用过自定义过滤器,但希望这至少能让你找到正确的方向。
【讨论】: