'str' 对象没有属性 'relative_url'

'str' object has no attribute 'relative_url'

我在 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 %}
    <form action="{% pageurl page %}" method="POST">
     {% csrf_token %}
    <div class="shop-subscribe bg-color-green margin-bottom-40">
        <div class="container">
                <div class="row">
                    <div class="col-md-8 md-margin-bottom-20">
                            <h2>Subscribase para mantenerse<strong> informado</strong></h2>
                    </div>




                    <div class="col-md-4">
                            <div class="input-group">


                             <input type="text" class="form-control" placeholder="Correo Electronico..." {{ form.subscribase }}>
                                    <span class="input-group-btn">
                                            <button class="btn" type="submit"><i class="fa fa-envelope-o"></i></button>
                                    </span>

                            </div>

                                {{ form.subscribase.errors }}
                        </div>
                </div>
        </div><!--/end container-->
    </div>

 </form>

如果我删除行:

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

表单内容加载,但当然不会 post。有人可以帮我弄清楚如何解决这个问题吗?

你应该使用

{% url url_name %}

(注意:url,不是页面url)并且在 urls 中定义了一个名为 page 的 url .

这是失败的,因为您的模板代码引用了变量 pageform,但您没有从代码中传递它们。 (我希望在这里看到的错误是 'NoneType' object has no attribute 'relative_url' - 你的错误表明你正在传递一个字符串作为 page 变量。)

使这项工作可行的一种方法:

@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(),
    }