2017-07-18 2 views
0

J'ai suivi les instructions sur le Wagtail Form Example sur Github pour créer des formulaires Django standard en dehors de Wagtail. Cela a fonctionné parfaitement, mais il y a un nouveau problème maintenant.Problème avec le modèle Page lors de la substitution de serve()

Sur les pages où il y a des formes, le code du modèle standard liés à la page en base.html ne fonctionne plus, à savoir: la méthode

 {% block title %} 
      {% if self.seo_title %}{{ self.seo_title }}{% else %}{{ self.title }}{% endif %} 
     {% endblock %} 
     {% block title_suffix %} 
      {% with self.get_site.site_name as site_name %} 
       {% if site_name %}| {{ site_name }}{% endif %} 
      {% endwith %} 
     {% endblock %} 

mon service() priorité suivante:

class MyPage(Page): 
# My Code 

    def serve(self, request): 
     from .forms import MyForm 

     if request.method == 'POST': 

      form = MyForm(request.POST) 

      if form.is_valid(): 
       my_data = form.save() 

       return render(request, 'my_other_template.html', { 
         'page': self, 
         'my_data': my_data, 
        }) 

     else: 
      form = MyForm() 

     return render(request, 'my_template.html', { 
      'page': self, 
      'form': form, 
     }) 

Des idées sur ce qui ne va pas?

Répondre

1

Vous utilisez la variable self dans votre code de modèle, mais il n'y a pas self variable de contexte étant passé dans l'appel à render - seulement page et form.

L'utilisation de self dans les modèles est déconseillée car elle est incompatible avec certains moteurs de gabarits tels que Jinja2. Vous devez utiliser page à la place:

{% if page.seo_title %}{{ page.seo_title }}{% else %}{{ page.title }}{% endif %} 

Sinon, si vous ne voulez pas mettre à jour votre code de modèle, vous pouvez passer self dans l'appel à render:

return render(request, 'my_template.html', { 
     'self': self, 
     'page': self, 
     'form': form, 
    })