2

有一个在Twitter的一个功能叫做从邮件中提取标签#标签。
例如,在划分视图与模板之间的责任在Django

"Hey #guys, I love #stackoverflow" 

#guys#stackoverflow是可以点击的,并导致自己的查询。

我正在构建一个类似的应用程序进行培训,我不知道何时何地在输出中实际注入链接?

我抓住所有最近的鸣叫:

def index(request): 
    latest_tweets = Tweet.objects.all().order_by('-pub_date')[:5] 
    return render_to_response('index.html', 
           { 'tweets': latest_tweets }, 
           context_instance=RequestContext(request) 
          ) 

并且以块为我呈现:

{% for tweet in tweets %} 
    <p>{{tweet.message}}</p> 
{% endfor %} 

但这当然只是表明普通消息,没有链接。
我想在每个message#tag在查询字符串到一个名为by_tag视图传递标签名称的链接来代替。

是否插入<a href="..."> s属于views.py?那么,如果我决定以后这是一个AJAX链接?好吧,看起来这属于模板。但我怎么做,从一个模板路由这样一个复杂的更换?我应该写一个自定义模板过滤器吗?

仅供参考,Tweet包含它的Tag在一个名为tags的字段中。

回答

4

我上周类似的做了,并写了一个快速的定制template filter扫描文本寻找提到和井号标签和链接他们包裹。

https://gist.github.com/1023144

这是有道理的在模板级别为您正在执行HTML标记/更换做到这一点。

通常,您的视图执行路由逻辑,即采取URL,检索和聚合必要的数据,并呈现模板。

如果您需要在模型上执行任何关联的逻辑(例如,比较tweets),将它放在模型函数或模型管理器中是个好主意,因为它与您的逻辑关系模型和数据库。

在在模板级别的任何逻辑通常应该处理所述结构化并显示它已经从该视图中接收的数据。

有时候,您可能想要在模板级别执行一些逻辑,以便可以在不同视图之间重复使用它(例如抓取前10个最受欢迎的标签)。这是创建一个模板标签来执行逻辑的好时机(和它也很好的和可重复使用的)

无论如何,地方代码:

yourapp/templatetags.py 

,并在模板:

{% for tweet in tweets %} 
    <p>{{ tweet.message|twittify }}</p> 
{% endfor %} 
+0

感谢您提供精彩的解释和代码片段。现在我想知道:是否可以将模板中的应用程序链接硬化?例如,在ASP .NET MVC中,而不是像'/ product/create /'那样指定URL,我们调用Url.Route('Product','Create')'它读取路由表并给出控制器和动作名称的URL。这通常在django中完成? (考虑到我希望链接到'name'参数的'by_tag'视图) – 2011-06-14 00:58:59

+1

是的,你可以得到这个功能。如果您想在视图或应用程序逻辑中查找URL,请使用反向函数:(https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse)或者如果您要在模板中使用“url”模板标记实现相同的功能:(https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#url)。如果你不能工作,打开一个新的问题,你将能够得到帮助 – 2011-06-14 01:11:01

+0

这些链接都是我需要的,我发誓我可以找到他们,如果我更难搜索。非常感谢你的帮助! – 2011-06-14 01:12:59

相关问题