Django搜索引擎优化应用程序,整合外部数据,如“年度最佳产品”

2024-05-23 15:36:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在我的元标记中集成外部数据。我想实现的-通过在标题字段(在管理中)“详细信息{产品名称}}“我想得到自动得到“强子对撞机的细节”作为一个浏览器的结果。我的模板里有这个

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

我将产品对象传递给模板,但得到的结果是“detailsfor{{产品名称}}“,所以{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!.

虽然这对我不管用。求你了,救命。可能我做错了什么。在


Tags: theinstancenameyou模板seofortoday
2条回答

好吧,在经历了几天的沮丧之后:)我解决了它,至少对于我的项目来说,而且目前只针对模型,但是对于ModelInstance和Views,几乎我以后会解决的,在我的例子中也有同样的问题。我对Django比较陌生,所以可能存在更好的解决方案,我找到了这个。在

我使用Django1.6.4,Python2.7,多语言项目(DjangoTransmeta用于模型转换)

问题是: 1模型、模型实例和视图中的变量替换不起作用。因此,如果我们将一个对象传递给djangoso,它将不会替代例如{{product}}},{产品名称}}变量。根据文件,它应该。问题是,模型在后端.py,ModelBackend类。函数_resolve_value不将object传递给函数_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

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

^{pr2}$

问题是2-djangoso对任何语言都使用一个元数据实例,即使使用选项use_18n=True。所以,添加上面提到的_language=language。在

Django搜索引擎优化应用程序相当不错,它拥有SEO所需的一切(如果它有效的话),所以没有理由重新设计轮子。在

您需要将变量包装在html标记中。在

{% load seo %}
{% get_metadata for product as metadata %}
<html>
<head>
    <title>{{ metadata.title}}</title>
</head>
<body></body>
</html>

相关问题 更多 >