Django - 替换整个项目中的字符串

时间:2014-01-06 08:37:09

标签: python django string performance replace

目前我创建了一个非常大的项目,我需要实现将用字符串替换为用户提供的字符串的功能。此外,每个用户都可以拥有自己的自定义字符串。我将举例说明以便更好地理解

有一个字符串“object”,user1想要将字符串“object”更改为“tree”,在整个项目中(所有模板等)字符串“object”被“tree”替换

我的想法如下:

  1. 创建可替换字符串的中间件
  2. 创建js插件
  3. 创建blockreplace(类似blocktrans),它只会在块中替换字符串(我还需要将它与trans连接)
  4. 你还有其他更好的想法吗?对你来说哪个想法是最好的选择?

    实施例

    模板main.html中的文字

    ... 这个对象非常有用 ...

    每个用户都可以通过自定义字符串

    对网站进行个性化设置
    • user1想要“tree”而不是“object”
    • user2想要“apple”
    • user3想要“葡萄”

    他们保存设置,然后当他们进入main.html时,他们会看到

    • user1:此非常有用
    • user2:此苹果非常有用
    • user3:此葡萄非常有用

    希望有所帮助

4 个答案:

答案 0 :(得分:1)

免责声明:如果您必须这样做,我认为您的项目有问题。你考虑过使用变量吗?

在Linux下,此命令将在当前目录

下的所有文件中将“orange”替换为“whale”
find -type f -exec sed -i s/orange/whale/ {} \;

答案 1 :(得分:0)

我可以根据您的问题考虑2个方案

  1. 用户可以替换模板中的任何字符串。 (这里我假设字符串只能在模板中替换)
  2. 或者您有预定义的字符串集合,用户可以更改或覆盖。
  3. 如果您的问题与方案1匹配,那么很难实现任何简单而干净的解决方案来解决您的问题。也许你可以给用户一个HTML编辑器来重写模板的内容。

    但是如果您的问题与方案2匹配,那么您可以将所有这些预定义的关键字以key:value对的形式放在任何持久存储中,当用户登录时,然后在内存中加载这些key:value对。并使模板从内存中获取预定义键的值(可以通过Django contextprocessor)。

答案 2 :(得分: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以找到我应该替换字符串的类。

答案 3 :(得分:0)

这更像是项目架构问题。 做我想“想要”的最好方法是:

  1. 在数据库中创建“字符串”选项列表。
  2. 在用户模型中创建一个类似“chosen_string”
  3. 的字段
  4. 当用户选择要使用的选项(字符串)时,您只需更新用户模型
  5. 只要您想使用字符串,只需进行查询。