【问题标题】:How to add meta keyword with django如何使用 django 添加元关键字
【发布时间】:2013-07-30 10:27:41
【问题描述】:

我正在使用以下代码添加元关键字 -

在 view.py 中

@template_render("mysite/category.html")
def category(request, slug):
    slug = slug.lower()
    product_type = local_settings.CATEGORY_NAME_TO_ID.get(slug, False)
    if not product_type:
        raise Http404
    products = models.Product.objects.active().filter(product_type = product_type).all()
    return { 'products' : products, 'slug' : slug, 'key':'wholesale ipad, ipad with retina display, ipad mini, ipad 3, ipad 2',}

在模板文件中-

{% extends "base.html"%}
{%load appletrade_tags%}
{% block key %}siteTrade - {{key}}{% endblock %}
{%block title%}site Trade - {{slug}}{%endblock%}

但它没有反映。我已经在查看源代码中检查了没有关键字。

但是,是的,标题正在反映。

你能帮我找出我错在哪里吗?

编辑:

base.html

{% extends "base.html"%}
{% block key %}{%if page.key%}{{page.key}}{%else%}{{block.super}}{%endif%}{% endblock %}
{% block desc %}{%if page.desc%}{{page.desc}}{%else%}{{block.super}}{%endif%}{% endblock %}
{%block title%}{%if page.title%}{{page.title}}{%else%}{{block.super}}{%endif%}{%endblock%}
{%block content%}
{%endblock%}

【问题讨论】:

    标签: python django keyword meta-tags


    【解决方案1】:

    您需要使用 render 或 render_to_response 将上下文传递给模板。 slug 对象是否出现在页面上?

    from django.shortcuts import render_to_response
    
    def category(request, slug):
        slug = slug.lower()
        product_type = local_settings.CATEGORY_NAME_TO_ID.get(slug, False)
        if not product_type:
            raise Http404
        products = models.Product.objects.active().filter(product_type = product_type)
        context = {
            'slug': slug,
            'products': products,
            'key': 'wholesale ipad, ipad with retina display, ipad mini, ipad 3, ipad 2',
        }
        return render_to_response('appletrade/category.html', context, context_instance=RequestContext(request))
    

    【讨论】:

    • 谢谢。我是 python 新手。您能否突出显示我必须在哪里更改代码?
    • 试过但它给出错误“视图 appletrade.views.category 没有返回 HttpResponse 对象。”
    • @HelloPython 你导入了 render_to_response 吗?应该有比这更详细的回溯。
    • 他忘记更改他的返回语句,他仍在返回那个字典。
    • 好的。我能理解。谢谢:)
    【解决方案2】:

    这是一种为您的 django 网站自动化关键字的方法。反正我不喜欢手动输入东西。

    这是一个读取模板文件并计算主要单词的函数,并返回页面中使用的单词列表。

    # meta_gen.py
    # create meta keywords for webpage automagically
    # MIT License
    # Author: Daniel P. Clark 6ftdan@gmail.com
    import collections, string, StringIO, re
    from django.utils.html import strip_tags
    
    # Counts words in template files and insert keywords into page
    word_count_min = 2
    word_length_min = 4
    
    nogo_list = [] # Optional list of words you may not want as meta tags.
    
    # meta_keywords ( html string ) => 
    #   returns non html keyword list, as a comma seperated string,
    #   for words fitting qualifications as chosen above.
    def meta_keywords(str_file):
        c = collections.Counter()
        strIO_Obj = StringIO.StringIO(str_file)
        for line in strIO_Obj.readlines():
            c.update(re.findall(r"[\w']+", strip_tags(line).lower()))
        wordlist = []
        for word, count in c.most_common():
            if len(word) > (word_length_min-1) and count > (word_count_min-1) and word not in nogo_list: wordlist.append(word)
        return string.join(wordlist, ',')
    

    将 meta_gen.py 放在您的主项目文件夹中。然后将这些片段添加到您的每个 views.py 文件中。

    # views.py
    from django.shortcuts import render_to_response
    from django.template.loader import render_to_string
    from project.meta_gen import meta_keywords
    
    this_template = "apptemplate.html"
    
    def tabs(request):
        return render_to_response(this_template, { 'title' : "Page Name", 'keys' : meta_keywords(render_to_string(this_template)) })
    

    最后在主模板 base.html 中放置关键字的元标记。

    # base.html
    <head>
    <title>Site Name - {{ title }}</title>
    <meta name="keywords" content="{{ keys }}" />
    </head>
    

    就是这样。所有继承基本模板并具有views.py 代码的页面都将插入关键字元标记,其中包含在您的页面上重复的单词。

    我意识到这可以改进和优化。速度对我来说不是问题。所以欢迎输入。

    【讨论】:

    • 真的很棒,我一直在寻找一种动态的方式来生成我的关键字,这个想法似乎很完美,我也会用它来从我的模型中生成关键字!
    猜你喜欢
    • 2011-05-20
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多