Django ';str';对象没有属性';相对url';

Django ';str';对象没有属性';相对url';,django,django-forms,tags,django-templates,wagtail,Django,Django Forms,Tags,Django Templates,Wagtail,在wagtail中加载模板标记时,我收到错误消息“str”对象没有“relative_url”属性 这是我的标签代码: from django import template from home.models import * register = template.Library() @register.inclusion_tag('home/subscribe_form.html') def test_vdcristo(): return {} 以下是我的html模板代码: {

在wagtail中加载模板标记时,我收到错误消息“str”对象没有“relative_url”属性

这是我的标签代码:

from django import template
from home.models import *

register = template.Library()

@register.inclusion_tag('home/subscribe_form.html')
def test_vdcristo():
    return {}
以下是我的html模板代码:

{% load wagtailcore_tags  vdecristo_tags %}

{%csrf_令牌%}
Subscribase para mantenerseinformado
{{form.subscribase.errors}
如果我删除该行:

<form action="{% pageurl page %}" method="POST">

表单内容已加载,但当然不会发布。有人能帮我解决这个问题吗?

你应该使用

{% url url_name %}

(注意:url,而不是pageurl)并在url中定义了一个名为page的url。

这是失败的,因为模板代码引用了变量
页面
表单
,但您没有从标记代码中传递它们。(我希望在这里看到的错误是,
'NoneType'对象没有属性'relative_url'
-您的错误表明您正在将字符串作为
页面
变量传递。)

一种可行的方法是:

@register.inclusion_tag('home/subscribe_form.html')
def test_vdcristo():
    # Look up the relevant form page by slug; replace FormPage and 'subscribe-now'
    # as appropriate for your site
    page = FormPage.objects.get(slug='subscribe-now')
    return {
        'page': page,
        'form': page.get_form(),
    }

对于Django来说,这通常是正确的,但是在Wagtail
{%pageurl…%}
中,当您需要对应于Wagtail页面对象的URL时,可以使用适当的标记。我现在在加载test_vdcristo标记时在/radio/'request'处收到错误消息keyrerror。还有其他建议吗?您可能需要从父模板的上下文中检索'request'变量-请参阅关于'takes_context'的部分-并在返回的变量列表中传递
'request':context['request']
。传递'request':context['request']修复了该问题。谢谢
@register.inclusion_tag('home/subscribe_form.html')
def test_vdcristo():
    # Look up the relevant form page by slug; replace FormPage and 'subscribe-now'
    # as appropriate for your site
    page = FormPage.objects.get(slug='subscribe-now')
    return {
        'page': page,
        'form': page.get_form(),
    }