详解Django的 get_meta_description() 函数:获取页面的元描述信息

  • Post category:Python

get_meta_description()函数是Django中用来获取页面meta标签中description内容的方法,一般在SEO优化方面会使用到该方法。下面我们来详细讲解一下它的作用和使用方法,同时提供两个示例供参考。

作用

在网站开发中,meta标签有时候用于描述网站页面的一些信息,比如页面的关键词、简介等。其中,description标签用于描述页面的简介,该标签内容会被搜索引擎收录和展示。而get_meta_description()函数的作用就是从页面中获取description标签的内容。

使用方法

  1. 从视图函数中调用

可以在视图函数中调用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标签。

  1. 在模板中使用

还可以直接在模板中使用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来获取商品的描述信息。