gpt4 book ai didi

python - Django SEO 应用程序,集成外部数据,如 'Best {{ product }} of the year'

转载 作者:太空宇宙 更新时间:2023-11-03 18:23:39 24 4
gpt4 key购买 nike

我正在尝试将外部数据集成到我的元标记中。我想要实现的目标 - 通过在标题字段(在管理中)输入“{{product.name}}的详细信息”,我希望在浏览器中自动获得“强子对撞机的详细信息”。我的模板中有这个

{% load seo %}
{% get_metadata for product as metadata %}
{{ metadata.title }}

并且我将 Product 对象传递给模板,但我得到的结果是未更改的“{{ Product.name }} 的详细信息”,因此 {{ value }} 不会被填充/解析?我已阅读文档 http://django-seo.readthedocs.org/en/latest/reference/administrators.html ,看起来很简单

If you would like to reference the relevant model instance, you type the name of the model surrounded by two braces. For example Buy {{ product }} today!. You can go further and reference different fields from the relevant instance, for example By {{ product.name }} today!.

虽然这对我不起作用。请帮忙。可能我做错了什么。

最佳答案

好吧,经过几天的抑郁:)我解决了它,至少对于我的项目来说,目前仅对于模型来说,但是对于 ModelInstance 和 View 来说,几乎我稍后会解决它,在我的情况下也有同样的问题。我对 Django 很陌生,所以可能存在更好的解决方案,我找到了这个。

我使用 Django 1.6.4、Python 2.7、多语言项目(Django Transmeta 进行模型翻译)

问题:1.模型、模型实例和 View 中的变量替换不起作用。因此,如果我们将一个对象传递给 DjangoSEO,它不会替代例如{{ 产品 }}、{{ 产品.名称 }} 变量。根据文档应该如此。 Model 的问题位于 backends.py ModelBackend 类中。函数 _resolve_value 不会将对象传递给函数 _resolve,该函数应该用对象属性填充元标记。以下是对我有用的稍作更改的功能。

def _resolve_value(self, name):
value = super(ModelMetadataBase, self)._resolve_value(name)
try:
return _resolve(value, self._content_object)
except AttributeError:
return value

def _resolve(value, model_instance=None, context=None):
""" Resolves any template references in the given value. """

if isinstance(value, basestring) and "{" in value:
if context is None:
context = Context()
if model_instance is not None:
context[model_instance.__class__.__name__.lower()] = model_instance
t = Template(value)
value = t.render(context)
return value

此外,在文件 base.py 中,函数 get_linked_metadata 我们必须将对象附加到元数据实例,如下所示:

if ModelMetadata is not None:
try:
model_md = ModelMetadata.objects.get(_content_type=content_type, _language=language)
except ModelMetadata.DoesNotExist:
model_md = ModelMetadata(_content_type=content_type, _language=language)

model_md._content_object = obj
instances.append(model_md)

问题 2 - DjangoSEO 对任何语言都使用一个元数据实例,即使选项 use_i18n = True 也是如此。因此,请如上所述添加 _language=language。

Django SEO 应用程序非常好,它拥有 SEO 所需的一切(如果它有效:),因此没有理由重新发明轮子。

关于python - Django SEO 应用程序,集成外部数据,如 'Best {{ product }} of the year',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23630776/

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