2014-01-06 44 views
0

目前我正在創建一個相當大的項目,我需要實現用用戶提供的字符串替換字符串的功能。而且每個用戶都可以擁有自己的自定義字符串。我將舉例以便更好地理解Django - 替換整個項目中的字符串

在整個項目中(所有模板等)都有一個字符串「object」,user1想將字符串「object」更改爲「tree」,字符串「object」被替換爲「tree」

我的思路是folllow:

  1. 創建中間件這將替換字符串
  2. 創建JS插件
  3. 創建blockreplace(類似blocktrans),這隻會在塊替換字符串(我還需要Ť o連接它反式)

你有任何其他的想法會更好嗎?哪個想法對你來說是最好的選擇?

例子:在模板main.html中

文本

... 此對象是非常有用的 ...

和每個用戶都可以通過他的習慣進行個性化網站字符串

  • user1想要而不是「物」,「樹」
  • user2的希望「蘋果」
  • 用戶3要「葡萄」

他們保存他們的設置,然後當他們進入main.html中,他們看到

  • 用戶1:此是非常有用的
  • 用戶2:此蘋果是非常有用的
  • 用戶3:此葡萄是非常有用的

希望它有助於

+1

你是什麼意思的「字符串」?你能提供一些代碼示例嗎? – devict

+0

當然,作爲字符串,我的意思是發生在我的項目中的文本。我添加了更好的示例來提問 – Arturo

+0

您是否需要這個?用戶是否決定要替換哪些字符串,或者您能否提前告訴我可以更改什麼,哪些不可以更改? – yuvi

回答

0

經過對這個問題的思考後,我得出結論,最好的選擇是中間件。

class CustomWordsMiddleware(object): 

    def process_response(self, request, response): 

     if request.user.settings == 'lumberjack': 
      response.content = response.content.replace("object", "tree") 
      response.content = response.content.replace("objects", "trees") 

     return response 

當然這只是一個例子,我也會實現regexp而不是字符串替換。此外,我將使用美麗的湯來解析html來找到我應該替換字符串的類。

1

聲明:我覺得有什麼不對您的項目,如果你不得不這樣做。你有沒有考慮使用變量?

在Linux下,該命令將在所有的文件替換「橙色」到「鯨魚」在當前目錄下

find -type f -exec sed -i s/orange/whale/ {} \; 
+0

感謝您的迴應;)但我不想不斷改變字符串。我只是想添加功能,這將有助於爲用戶個性化我的網站。目標是每個用戶都可以擁有自己的字符串(動態內容) – Arturo

+0

我不明白你爲什麼不能使用變量。也許你模型中的一個類將一個對象與你的用戶關聯起來? – Johanna

+0

這將是一個偉大而簡單的解決方案,說實話,我甚至沒有想過它......但是,我想讓用戶從列表中選擇任何單詞(可以包含很多字符串),所以它會是很難在模板中使用如此多的變量而不會失去句子的意義。 – Arturo

0

我能想到的2種情景基礎的問題

  1. 用戶可更換模板中的任何字符串。(這裏我假設字符串只能在模板中替換)
  2. 或者您有預定義的字符串集合,用戶可以更改或覆蓋。

如果您的問題與場景1匹配,那麼實現任何簡單而乾淨的解決方案來解決您的問題是非常困難的。也許你可以給用戶一個HTML編輯器來重寫模板的內容。

但是,如果你的問題相符的情況2,那麼你可以把所有這些預先定義的關鍵字在任何持久性存儲在密鑰的形式:值對,當用戶登錄,然後加載這些鍵:值對用戶在記憶。並讓您的模板從內存中獲取預定義鍵的值(可能通過Django contextprocessor)。

0

這更像是一個項目架構問題。 做我認爲你想要的最好的方法是:

  1. 創建一個數據庫中的「字符串」選項列表。
  2. 在用戶模式創建一個字段,如「chosen_string」
  3. 當用戶選擇該選項可以使用(串),只要你想使用字符串您只需更新用戶模型
  4. ,只是做了查詢。