在Django中,视图和模板之间的责任划分

|| Twitter中有一个名为“标签”的功能,可从消息中提取标签。 例如,在
\"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=\"...\">
是否属于
views.py
?那如果以后我决定将其作为AJAX链接怎么办?好吧,似乎这属于模板。但是,如何使用模板路由进行如此复杂的替换呢?我应该编写自定义模板过滤器吗? 仅供参考,,10ѭ在称为called12ѭ的字段中包含its11ѭ。     
已邀请:
        上周,我做了类似的事情,并编写了一个快速的自定义模板过滤器,以扫描文本以查找提及和主题标签并将其包装在链接中。 https://gist.github.com/1023144 在执行HTML标记/替换时,在模板级别执行此操作很有意义。 通常,您的视图执行路由逻辑,即获取url,检索和汇总必要的数据并呈现模板。 如果您需要对模型执行任何关联的逻辑(例如,与推文进行比较),则最好将其放入模型函数或模型管理器中,因为它与模型和数据库相关联。 模板级别的任何逻辑通常应解决结构化和显示从视图接收到的数据的问题。 但是有时,您可能希望在模板级别执行一些逻辑,以便可以在不同视图之间重用(例如,获取前10个最受欢迎的标签)。现在是创建执行逻辑的模板标签的好时机(它也很好并且可重用) 无论如何,将代码放置在:
yourapp/templatetags.py
并在模板中:
{% for tweet in tweets %}
    <p>{{ tweet.message|twittify }}</p>
{% endfor %}
    

要回复问题请先登录注册