python – 使用djangoCMS render_model的自定义包含模板标签

python – 使用djangoCMS render_model的自定义包含模板标签,第1张

概述我用 djangoCMS创建了一个网站,并大量使用apphooks,cms插件,向导等.我们有一个简单的应用程序,只有一个模型保存应显示在主页上的核心数据. models.py from django.db import modelsfrom django.utils.text import slugifyfrom django.urls import reversefrom cms.mo 我用 djangoCMS创建了一个网站,并大量使用apphooks,CMS插件,向导等.我们有一个简单的应用程序,只有一个模型保存应显示在主页上的核心数据.

models.py

from django.db import modelsfrom django.utils.text import slugifyfrom django.urls import reversefrom CMS.models.fIElds import PlaceholderFIEldfrom djangoCMS_text_ckeditor.fIElds import HTMLFIEldclass Programme(models.Model):    name = models.CharFIEld(max_length=60,unique=True)    slug = models.SlugFIEld()    icon = models.CharFIEld(max_length=50,unique=True)    introduction = HTMLFIEld()    overvIEw = PlaceholderFIEld(        'programme_overvIEw',related_name='programmes_overvIEw'    )    def __str__(self):        return self.name    def get_absolute_url(self):        return reverse(            'programmes:programme-detail',kwargs={'slug': self.slug}        )    def save(self,*args,**kwargs):        if not self.pk:            self.slug = slugify(self.name)        super(Programme,self).save(*args,**kwargs)

我决定为此目的创建一个自定义包含模板标签.

templateTags / programmes_Tags

from django import templatefrom ..models import Programmeregister = template.library()@register.inclusion_tag('programmes/programme_List.HTML')def programme_List():    programmes = Programme.objects.all()    return {'programmes': programmes}

模板中,我使用CMS_Tags中的render_model,因为编辑器应该能够编辑前端中的内容.这是模板:

模板/程序/ programme_List.HTML

{% load CMS_Tags %}{% for programme in programmes %}    <div >        <div >            <i  ></i>            <h3>                <a href="{% url 'programmes:programme-detail' programme.slug %}">                    {{ programme.name }}                </a>            </h3>            <p >                {% render_model programme 'introduction' %}            </p>        </div>    </div>{% endfor %}

该标记现在用于主页的模板中:

{% load programmes_Tags %}{% programme_List %}

当我打开主页时,它会抛出一个错误:

KeyError: 'request'

显然,render_model标记需要访问请求.当我尝试更改模板标签时:

@register.inclusion_tag('programmes/programme_List.HTML',takes_context=True)def programme_List(context):    programmes = Programme.objects.all()    context.update({'programmes': programmes})    return context

请求作为RequestContext的一部分传递,但随后抛出此错误:

ValueError: dictionary update sequence element #1 has length 1; 2 is required

我该如何正确更新RequestContext?
如果使用templatetag不是正确的方法,请指出什么是更好的解决方案.

解决方法 让take_context在那里并使用您的旧代码.没试过这个.

@register.inclusion_tag('programmes/programme_List.HTML',takes_context=True)def programme_List(context):    request = context['request']    programmes = Programme.objects.all()    return {'programmes': programmes,'request': request}
总结

以上是内存溢出为你收集整理的python – 使用djangoCMS render_model的自定义包含模板标签全部内容,希望文章能够帮你解决python – 使用djangoCMS render_model的自定义包含模板标签所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1196377.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存