2010-11-24 48 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上的跨越界限如何來呈現數據,並且在視圖中會更好,因爲它們是通用數據展示器。

相關問題