下面的代码应将 AD 的“内容”字段中的所有 \[\[(.+)\]\]
匹配项替换为 ADResource 的 src,其中 (.+)
是别名
[[Similac]]
→ media/banners/2011/07/24/ad1.gif
[[res]]
→ media/banners/2011/07/24/ad2.png
它捕获 [[res]] 或 [[Similac]] 上的DoesNotExist 异常并返回“res”或“Similac”字符串。
ADResource table contents:
id alias src
----------------------------------------------------
1 Similac media/banners/2011/07/24/ad1.gif
2 res media/banners/2011/07/24/ad2.png
class ADResource(models.Model):
alias = models.CharField(max_length=256)
src = models.FileField(upload_to="media/banners/%Y/%m/%d/")
class AD(models.Model):
content = models.CharField(max_length=10000)
def getResourceURL(object, object_alias):
try:
return ADResource.objects.all().get(alias="%s" % object_alias).src.url
except ADResource.DoesNotExist:
return object_alias
def save(self, **kwargs):
self.content = re.sub(r'\[\[(.+)\]\]', AD.getResourceURL(self, r'\1'), self.content)
super(AD, self).save(**kwargs)
但是这段代码正在工作,我得到了 src 字段的 url:
return ADResource.objects.all().get(alias='res').src.url
最佳答案
哦,愚蠢的问题,我得到的不是字符串而是正则表达式对象,并且我的匹配位于第一个子组中。
self.content = re.sub(r'\[\[(.+)\]\]', lambda m: ADResource.objects.all().get(alias=m.group(1)).src.url, self.content)
关于python - 无法从查询集中获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6809180/