如何使用 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
我的问题:
我希望它在元标记中呈现文章的“标题”和“内容”,但它将元标记呈现为
<meta.views.Meta object at ******>
在页面的主体上。
问题: 我怎样才能让它呈现在文档的头部? 为了使元标记呈现应有的效果,我缺少什么?
任何帮助将不胜感激。如果需要,我可以提供更多信息。谢谢
【问题讨论】:
【参考方案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 % <meta name="description" content=" meta.description "> <meta name="title" content=" meta.title "> % endblock %
嗨,这个 if 语句应该根据加载的 url 更改元标记。当“主页”加载时没有显示任何内容,但所需的元标记会加载到其他页面上。你知道为什么吗? % url 'homepage' as home % % if request.get_full_path == home % <title>Foo Bar Title </title> <meta name="description" content="Foo bar Content"> % else % <meta name="description" content=" meta.description "> <meta name="title" content=" meta.title "> % endif %
这个块是在你的基础还是在你的详细文章模板中?您可以将block
语句中的默认值写入基本模板,例如:% block meta_extend %<title>Foo Bar Title </title> <meta name="description" content="Foo bar Content">% endblock %
在详细文章模板中。但这解决了问题。谢谢。以上是关于如何使用 django-meta 模块(或任何更简单的方法)来呈现 html 元标记的主要内容,如果未能解决你的问题,请参考以下文章
Android 高亮View引导页的更简解决方案-Curtain