2010-11-24 33 views
4

在Django中,存在一个消息框架,在执行操作后通知用户。例如,从views.py有可能是这样的:消息应该驻留在网站/ Web应用程序的控制器还是模型中?

if success: 
    messages.success(request, 'Update Successful') 
else: 
    messages.warning(request, 'Something is missing') 

我相信Rails的有类似的东西:

flash[:notice] = 'Something is missing' 

如果消息上方的控制器硬编码?

+0

“硬编码”?有什么选择? I18N翻译的消息?还是你有其他的想法? – 2010-11-24 16:52:04

回答

2

如果我理解你的问题,你是问你是否应该在你的代码中硬编码一个字符串值。在编译语言中,您经常使用对字符串的引用,而不是输入实际的字符串。翼:

message.success(request, message_resource.success) 

这使您可以自由更改字符串值,而无需重新编译代码,并在某些情况下提高性能。

因为Python是动态的,这确实不是必需的,但取决于项目的大小,可能是有益的。

想象一下,人们说不同语言的人使用该软件的情况,您可以在代码中的其他位置检测到所需的语言,并将message_resource.success以及任何其他字符串初始化为所述语言。

这里是一个简单的例子:

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 
2

在Rails中,任何可以编组的对象都可以放在flash中。 因此,最好在视图中进行。

<% if flash[:notices] && flash[:notices][:missing] %> 
<div><%= t("Somethign missing") %></div> 
<% end %> 

把文本和翻译中的控制器确实有点难看..

+0

这是不是干 - 如果有说,移动浏览器视图或XML或其他东西,那么相同的文本将需要在每个视图中重复? – Zabba 2010-11-24 17:47:11

2

消息是事件。发生的事情。这就是MVC的“控制器”部分的全部内容。 “如何”。

(Django中称此为 “视图功能”。)

该模型(大部分)的东西,是静态的,最终的,持久的。被动。 “什么”。

事情发生在模型上。事情由控制器发起。

消息来自控制器以呈现给此人。

模型的方法可能需要提供关于状态变化的一些证据或信息。这不是模型创建消息的示例。如果模型具有突变/更新/状态更改的方法,则必须将事件分解为两部分。

“控制器”(即Django视图函数)必须使用模型的API来进行状态更改并收集有关该状态更改的任何信息。

“控制器”(查看功能)进行I18N转换并显示消息。

1

通用例子

  • 型号:is_missing()会包含在模型中,如果只依赖于数据的方法。

  • 控制器:从模型视图编组站数据:missing = Suff.get_by_id(1).is_missing()

  • 查看:<span>{$missing}<span>

但正是你画的线条始终是为辩论。在你的例子中,我会说flash,successwarning上的跨越界限如何来呈现数据,并且在视图中会更好,因为它们是通用数据展示器。

相关问题