【问题标题】:How to use django-meta module(or any easier way) to render html meta tags如何使用 django-meta 模块(或任何更简单的方法)来呈现 html 元标记
【发布时间】:2020-05-15 06:45:17
【问题描述】:

我已尽力遵循Django-meta 文档。 将其添加到我的设置文件中的应用程序列表中

INSTALLED_APPS = [
    ...
    'meta',
]

我的模型看起来像

from django.db import models
from meta.models import ModelMeta

class Article(ModelMeta, models.Model):
    user = models.ForeignKey(User, default=1, null=True, on_delete=models.SET_NULL)
    image = models.ImageField(upload_to='image/', blank=True, null=True)
    title = models.CharField(max_length=120)
    slug = models.SlugField(unique=True)
    content = models.TextField(null=True, blank=True)


    _metadata = {
        'title': 'title',
        'description': 'content',
    }

我的 views.py 看起来像

def article_detail_view(request, slug):
    obj = get_object_or_404(Article, slug=slug)
    template_name = ['snmov/home.html']
    context = {}
    context['object'] = obj
    context['meta'] = obj.as_meta()
    return render(request, template_name, context)

这个视图的路径看起来像

path('<str:slug>/', article_detail_view, name='article_detail'),

home.html 扩展了一个 base.html,其 head 标签具有

{% include "meta/meta.html" %}

meta.html 有

{{meta}}

我的问题: 我希望它在元标记中呈现文章的“标题”和“内容”,但它将元标记呈现为 &lt;meta.views.Meta object at ******&gt; 在页面的主体上。

问题: 我怎样才能让它呈现在文档的头部? 为了使元标记呈现应有的效果,我缺少什么?

任何帮助将不胜感激。如果需要,我可以提供更多信息。谢谢

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

    软件包信息/文档非常稀缺。

    我注意到的是:

    1. 将社交网络一次减少到“1”,帮助我简化控制台错误的内容
    2. 似乎有几个变量更喜欢通过“设置”(配置文件)来设置,而不是在代码中设置它们。 META_SITE_PROTOCOL = 'https' META_SITE_DOMAIN = env('DJANGO_META_SITE_DOMAIN', default='www.InternationalExampleNetwork.com') # META_USE_SITES = True # 警告:不要激活,因为它会使编译失败。

      META_USE_OG_PROPERTIES = True        
      FB_TYPE=''        
      FB_APPID=''
      FB_PROFILE_ID='1111111'        
      FB_PUBLISHER='@InternationalExampleNetwork'
      FB_AUTHOR_URL='/en/'
      FB_PAGES=''
      
      META_USE_TWITTER_PROPERTIES = False
      TWITTER_TYPE=11
      TWITTER_SITE=env('DJANGO_META_SITE_DOMAIN', default='www.InternationalExampleNetwork.com')
      TWITTER_AUTHOR='International Example Network'
      # Is there still some use for Google+ ... ? 
      META_USE_GOOGLEPLUS_PROPERTIES = False
      
    3. 到目前为止,对于 ME OG 网站 (https://ogp.me/) 的文档帮助不大(未来会证明)。

    【讨论】:

      【解决方案2】:

      您应该在基本模板的标题中创建一个块:

      <head>
           ...
           ...
      
           {% block meta_extend %}
           {% endblock %}
      </head>
      


      您可以在模板中打印元标记:

      {% block meta_extend %}
          {{ meta }}
      {% endblock %}
      

      或类似的东西:

      {% block meta_extend %}
          <meta name="description" content="{{ obj.description }}">
          <meta name="title" content="{{ obj.title }}">
      {% endblock %}
      

      【讨论】:

      • 非常感谢您的帮助,但有效的是{% block meta_extend %} &lt;meta name="description" content="{{ meta.description }}"&gt; &lt;meta name="title" content="{{ meta.title }}"&gt; {% endblock %}
      • 嗨,这个 if 语句应该根据加载的 url 更改元标记。当“主页”加载时没有显示任何内容,但所需的元标记会加载到其他页面上。你知道为什么吗? {% url 'homepage' as home %} {% if request.get_full_path == home %} &lt;title&gt;Foo Bar Title &lt;/title&gt; &lt;meta name="description" content="Foo bar Content"&gt; {% else %} &lt;meta name="description" content="{{ meta.description }}"&gt; &lt;meta name="title" content="{{ meta.title }}"&gt; {% endif %}
      • 这个块是在你的基础还是在你的详细文章模板中?您可以将block 语句中的默认值写入基本模板,例如:{% block meta_extend %}&lt;title&gt;Foo Bar Title &lt;/title&gt; &lt;meta name="description" content="Foo bar Content"&gt;{% endblock %}
      • 在详细文章模板中。但这解决了问题。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2010-11-27
      • 2013-08-05
      • 2022-08-04
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 2023-04-03
      • 1970-01-01
      相关资源
      最近更新 更多