python – 使用djangoCMS render_model的自定义包含模板标签
发布时间:2020-12-20 13:20:06 所属栏目:Python 来源:网络整理
导读:我用 djangoCMS创建了一个网站,并大量使用apphooks,cms插件,向导等.我们有一个简单的应用程序,只有一个模型保存应显示在主页上的核心数据. models.py from django.db import modelsfrom django.utils.text import slugifyfrom django.urls import reversefro
我用
djangoCMS创建了一个网站,并大量使用apphooks,cms插件,向导等.我们有一个简单的应用程序,只有一个模型保存应显示在主页上的核心数据.
models.py from django.db import models from django.utils.text import slugify from django.urls import reverse from cms.models.fields import PlaceholderField from djangocms_text_ckeditor.fields import HTMLField class 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 template from ..models import Programme register = 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 class="col-lg-2 col-md-4 col-sm-6 col-xs-12 text-center flex-item"> <div class="service-box"> <i class="fa fa-4x {{ programme.icon }} text-primary" style="visibility:visible;"></i> <h3> <a href="{% url 'programmes:programme-detail' programme.slug %}"> {{ programme.name }} </a> </h3> <p class="text-muted"> {% 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? 解决方法
让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} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |