如何使用 django-meta 模块(或任何更简单的方法)来呈现 html 元标记

Posted

技术标签:

【中文标题】如何使用 django-meta 模块(或任何更简单的方法)来呈现 html 元标记【英文标题】:How to use django-meta module(or any easier way) to render html meta tags 【发布时间】: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; 在页面的主体上。

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

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

【问题讨论】:

【参考方案1】:

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

我注意到的是:

    将社交网络一次减少到“1”,帮助我简化控制台错误的内容

    似乎有几个变量更喜欢通过“设置”(配置文件)来设置,而不是在代码中设置它们。 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
    
    到目前为止,对于 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 % 在详细文章模板中。但这解决了问题。谢谢。

以上是关于如何使用 django-meta 模块(或任何更简单的方法)来呈现 html 元标记的主要内容,如果未能解决你的问题,请参考以下文章

更简的并发代码,更强的并发控制

Android 高亮View引导页的更简解决方案-Curtain

Android 高亮View引导页的更简解决方案-Curtain

如何查找 Python 文件使用了哪些模块

argparse 模块如何在没有任何参数的情况下添加选项?

如何在没有任何附加模块的情况下在迷你 Web 服务器中返回 json?