django - Django 中 View 和模板之间的职责划分

标签 django django-templates django-views django-template-filters

Twitter 中有一个名为主题标签的功能,可以从消息中提取标签。
例如,在

"Hey #guys, I love #stackoverflow"

#guys#stackoverflow可点击并引发他们自己的查询。

我正在构建一个类似的训练应用程序,我想知道何时何地在输出中实际注入(inject)链接

我抓取所有最近的推文:

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

在我渲染的 block 中:

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

但这当然只显示纯消息,没有链接。
我想要每个#tagmessage替换为将查询字符串中的标记名称传递到名为 by_tag 的 View 的链接.

是否插入<a href="..."> s 属于 views.py ?那么如果我后来决定这是一个 AJAX 链接怎么办?好吧,看来这属于模板。但是如何使用模板路由进行如此复杂的替换呢?我应该编写自定义模板过滤器吗?

仅供引用,Tweet包含其 Tag位于名为 tags 的字段中.

最佳答案

我上周做了类似的事情并编写了一个快速自定义template filter扫描文本寻找提及和主题标签并将它们包装在链接中。

https://gist.github.com/1023144

当您执行 HTML 标记/替换时,在模板级别执行此操作是有意义的。

通常,您的 View 执行路由逻辑,即获取 URL、检索和聚合必要的数据以及呈现模板。

如果您需要在模型上执行任何关联的逻辑(例如,与推文进行比较),最好将其放入模型函数或模型管理器中,因为它是与您的模型相关的逻辑,并且数据库。

模板级别的任何逻辑通常都应该解决从 View 接收到的数据的结构和显示问题。

但有时,您可能希望在模板级别执行一些逻辑,以便可以在不同的 View 中重用它(例如抓取前 10 个最流行的标签)。这是创建模板标签来执行逻辑的好时机(而且它也很好并且可重用)

无论如何,将该代码放入:

yourapp/templatetags.py

在模板中:

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

关于django - Django 中 View 和模板之间的职责划分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6337293/

相关文章:

javascript - Django html模板:According to selection of category how can get subcategory list in drop down which are belongs to selected category

django - python : How to solve the issue : 'badly formed hexadecimal UUID string' in Django

python - 过滤 Django 数据库中包含数组中任何值的字段

django - Nginx 无法启动高性能 Web 服务器和反向代理服务器

django - 如何在 Django 模板中更新由 'with' 设置的变量

python - Django – 在模板标签中使用模板标签?

django - django ajax POST 上的 405 错误

python - 有人试图侵入我的 Django 应用程序吗?

python - Django nginx 管理媒体

django - 否定 Django 模板中的 bool 值