get_meta_description()函数是Django中用来获取页面meta标签中description内容的方法,一般在SEO优化方面会使用到该方法。下面我们来详细讲解一下它的作用和使用方法,同时提供两个示例供参考。
作用
在网站开发中,meta标签有时候用于描述网站页面的一些信息,比如页面的关键词、简介等。其中,description标签用于描述页面的简介,该标签内容会被搜索引擎收录和展示。而get_meta_description()函数的作用就是从页面中获取description标签的内容。
使用方法
- 从视图函数中调用
可以在视图函数中调用get_meta_description()函数,获取指定页面的description内容。示例代码如下:
from django.shortcuts import render
from django.views.generic import TemplateView
from django.utils.html import strip_tags
from django.utils.encoding import smart_str
from django.utils.text import Truncator
from django.utils.safestring import mark_safe
from django.contrib.sites.models import Site
from django.conf import settings
class MyView(TemplateView):
def get_context_data(self, **kwargs):
context = super(MyView, self).get_context_data(**kwargs)
context['meta_description'] = self.get_meta_description()
return context
def get_meta_description(self):
description = None
# 获取当前请求页面的URL
current_url = self.request.build_absolute_uri()
# 从数据库中获取当前站点信息
current_site = Site.objects.get_current()
# 获取当前页面对象
page = self.request.current_page
# 先从页面对象中获取description内容
if page.meta_description:
description = smart_str(page.meta_description.strip())
# 再从模板中获取description内容
if not description:
template = page.get_template()
description = template.meta_description.strip()
# 如果还是没有获取到description内容,则使用默认值
if not description:
description = settings.DEFAULT_DESCRIPTION
# 裁剪description内容
description = Truncator(strip_tags(description)).chars(156)
# 添加站点名称到description内容中
description += ' - ' + current_site.name
# 生成description标签
meta = '<meta name="description" content="%s">\n' % description
# 返回description标签
return mark_safe(meta)
上面的代码中,使用了Django提供的一些工具方法,比如strip_tags、smart_str以及Truncator等,用于裁剪description内容,并添加站点名称信息。get_context_data()方法用于向模板中添加获取的description标签。可以通过在模板中使用{{ meta_description }}来获取description标签。
- 在模板中使用
还可以直接在模板中使用get_meta_description()函数,用于获取当前页面的description内容。示例代码如下:
{% load wagtailcore_tags %}
{% load static %}
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
{% get_meta_description as meta_description %}
{{ meta_description }}
<title>我的网站</title>
<link rel="stylesheet" href="{% static 'css/main.css' %}">
</head>
<body>
<!-- 页面内容 -->
</body>
</html>
上面的代码中,调用了get_meta_description()函数,并将获取的description标签存储在meta_description变量中,然后在head标签中添加该标签即可。
示例
以下是两个示例,用于说明get_meta_description()函数的使用方法。
示例一
假设我们在使用Django框架开发一个博客网站,并使用了Wagtail作为后台管理系统,现在需要获取博客文章的描述信息,并将其添加到页面的description标签中。可以通过以下方式实现:
from django.shortcuts import render
from wagtail.core.models import Page
def blog_detail(request, slug):
# 获取指定博客文章的页面对象
blog_page = Page.objects.get(slug=slug)
# 获取博客文章的描述信息
description = blog_page.get_meta_description()
# 渲染模板并返回响应
context = {'blog_page': blog_page, 'meta_description': description}
return render(request, 'blog_detail.html', context=context)
在上面的代码中,调用了blog_page.get_meta_description()方法,获取当前博客文章的描述信息,并将其传递给模板使用。
示例二
在开发一个商城网站时,我们需要获取商品详情的description信息,并将其添加到页面的description标签中,以提高搜索引擎的收录效果。可以通过以下方式实现:
{% load static %}
{% load wagtailcore_tags %}
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
{% get_meta_description as description %}
{{ description }}
<title>{{ product.name }}</title>
<link rel="stylesheet" href="{% static 'css/main.css' %}">
</head>
<body>
<h1>{{ product.name }}</h1>
<img src="{{ product.image.url }}" alt="{{ product.name }}">
<div>{{ product.description }}</div>
<!-- 其他商品信息 -->
</body>
</html>
在上面的代码中,使用了{% get_meta_description as description %}标签,调用了get_meta_description()函数,并将获取的description标签存储在description变量中,然后在head标签中添加该标签即可。同时,使用了product.description来获取商品的描述信息。