gpt4 book ai didi

python - 对平面内容执行文本处理以包括自定义标记的处理

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:22:35 25 4
gpt4 key购买 nike

我在我的项目中使用 flatpages 应用程序来管理一些 html 内容。该内容将包含图像,所以我制作了一个 ContentImage允许用户使用管理面板上传图像的模型。然后用户应该能够将这些图像包含在平面页面的内容中。他当然可以通过在 <img> 中手动输入图片 url 来做到这一点。标签,但这不是我要找的。

为了更方便地包含图像,我正在考虑这样的事情:

  • 用户编辑了一个附加项,比方说 pre_content领域CustomFlatPage模型(我已经在使用自定义平面模型)
  • 而不是定义<img>直接标记,他使用自定义标记,例如 [img=...]其中 ...ContentImage 的名称实例
  • 现在是最难的部分:之前 CustomFlatPage已保存,pre_content所有 [img=...] 字段均已选中事件,它们是这样处理的:
  • ContentImage如果存在具有给定名称的图像实例,则搜索模型,如果是,[img=...]替换为适当的 <img>标签。
  • 平面实际content充满了处理过的pre_content然后保存平面页面(pre_content 保持不变,由用户编辑)

我无法应付的部分是文本处理。我应该使用正则表达式吗?显然,对于大字符串,它们可能会很慢。以及如何组织逻辑?我认为这是一个相当算法的问题,但我对 Python 中的文本处理不够熟悉,无法自己完成。

有人能给我任何线索吗?

最佳答案

我最终使用正则表达式实现了这一点。我决定,自定义标签内不允许有空格。主要的文本处理函数如下所示:

import re
from django.utils.translation import ugettext as _

def process_image_tags(text, ImageModel):
'''image tag usage:
... some text ... [img=image_name:image_class(optional)] ... some text ...
'''
t1 = re.split(r'(\[img=[a-z0-9\-_\:]+\])', text)
t2 = []
for i in t1:
if i[:5] == '[img=':
attrs = i[5:-1].split(':')
name_attr = attrs[0] #name attribute
error = None
try:
image = ImageModel.objects.get(name=name_attr)
except ImageModel.DoesNotExist:
error = '<span class="image_tag_error">%s</span>' % _('Image with given name not found')
except ImageModel.MultipleObjectsReturned:
error = '<span class="image_tag_error">%s</span>' % _('More than one image found')
if not error:
p = ['<img']
p.append('src="%s"' % image.image.url)
if len(attrs) > 1:
p.append('class="%s"' % attrs[1]) #class attribute
if image.description:
p.append('title="%s"' % image.description)
p.append('alt="%s"' % image.name)
p.append('/>')
t2.append(' '.join(p))
else:
t2.append(error)
else:
t2.append(i)
return ''.join(t2)

然后在 CustomFlatPage 模型的保存方法中使用上述函数,如下所示:

def save(self, *args, **kwargs):           
self.content = process_image_tags(self.pre_content, ContentImage)
super(CustomFlatPage, self).save(*args, **kwargs)

它似乎有效,所以我可能最终会使用该解决方案。也许我会添加一些 javascript 以便用户通过从生成的图像列表中选择图像来插入图像标签,但我认为即使现在它也比手动输入 url 更好。

关于python - 对平面内容执行文本处理以包括自定义标记的处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5054169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com