在Django中,存在一个消息框架,在执行操作后通知用户。例如,从views.py
可能有类似的内容:
if success:
messages.success(request, 'Update Successful')
else:
messages.warning(request, 'Something is missing')
我相信Rails有类似的东西:
flash[:notice] = 'Something is missing'
上述消息是否应在控制器中进行硬编码?
答案 0 :(得分:2)
在Rails中,任何可编组对象都可以放入闪存中。 因此,最好在视图中执行此操作。
<% if flash[:notices] && flash[:notices][:missing] %>
<div><%= t("Somethign missing") %></div>
<% end %>
在控制器中放置文本和翻译确实有点难看......
答案 1 :(得分:2)
消息是事件。发生的事情。这就是MVC的“控制器”部分。 “如何”。
(Django称之为“视图函数”。)
该模型(大部分)是静态的,最终的,持久的。被动。 “什么”。
事情发生在模特身上。事情由控制器发起。
消息来自控制器,以便呈现给此人。
模型的方法可能需要提供有关状态变化的一些证据或信息。这不是模型创建的消息的示例。如果模型具有进行突变/更新/状态更改的方法,那么您必须将事物分成两部分。
“控制器”(即Django视图函数)必须使用模型的API进行状态更改并收集有关该状态更改的任何信息。
“控制器”(视图功能)执行I18N翻译并显示消息。
答案 2 :(得分:2)
如果我理解你的问题,你就会问你是否应该将字符串值硬编码到你的代码中。在编译语言中,您经常使用对字符串的引用,而不是输入实际的字符串。丙氨酸:
message.success(request, message_resource.success )
这使您可以自由更改字符串值而无需重新编译代码,并且在某些情况下具有性能优势。
因为 Python 是动态的,所以这不是必需的,但取决于项目的大小,可能是有益的。
想象一下,在说不同语言的人使用该软件的情况下,您可以在代码中的其他位置检测所需的语言,并初始化message_resource.success
以及任何其他字符串,使用所述语言。< / p>
这是一个简单的例子:
german.py
# german language messages
success = "Sie folgten!"
failure = "Sie fallen aus!"
english.py
#english language messages
success = "You succeeded!"
failure = "You fail!"
main.py
# main
# import english language
message_resource = __import__('english');
print message_resource.success
print message_resource.failure
# import german language
message_resource = __import__('german');
print message_resource.success
print message_resource.failure
答案 3 :(得分:1)
通用示例
模型:方法is_missing()
将放在模型中,如果它仅依赖于数据。
控制器:来自视图模型的编组数据:missing = Suff.get_by_id(1).is_missing()
查看:<span>{$missing}<span>
但确切地说,你绘制这些线条的地方总是争论不休。在您的示例中,我会说flash
,success
和warning
在如何呈现数据方面超越了它们的界限,并且在查看,因为他们是通用数据演示者。