2014-01-06 37 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. ,只是做了查询。