私は約1週間はモーダルにフォームをロードしようとしていましたが、どういうことが間違っているのか分かりません。誰かが私に電子メールを送る単純なフォームです。フォームをモジュール化しようとしましたが、今はそれを直接base.htmlに直接ロードしようとしています。Crispy-formsを持つDjango VariableDoesNotExist
マイモデル:
from django.db import models
# Create your models here.
class EmailMe(models.Model):
subject = models.CharField(max_length=63)
body = models.TextField(max_length=2047)
email = models.EmailField()
def __str__(self):#shows object title when called from command line
return self.name`
私形式:
from django import forms
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout
from emailme.models import EmailMe
class EmailMeForm(forms.ModelForm):
subject = forms.CharField(max_length=63)
body = forms.CharField(max_length=2047)
email = forms.EmailField()
class Meta:
model = EmailMe
fields = '__all__'
def __str__(self):#shows object title when called from command line
return self.name
def __init__(self, *args, **kwargs):
super(EmailMeForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_id = 'myModal'
self.helper.form_class = 'form-horizontal'
self.helper.form_action = 'emailme'
self.helper.form_method = 'POST'
self.helper.layout = Layout(
Fields(
'subject',
'body',
'email',
),
FormActions(
Submit('submit', 'submit')
)
)
マイビュー:
from mysite.forms import EmailMeForm
def home(request):
return render_to_response('base.html')
def emailme(request):
if request.POST:
form = EmailMeForm(request.POST)
if form.is_valid():
return HttpResponseRedirect('home/')#reverse_lazy('home'))
else:
form = EmailMeForm()
ctx = {}
ctx.update(csrf(request))
args['form'] = form
return render_to_response('emailme_form.html',
{'form': form},
context_instance=ctx)
のURL:
"""mysite URL Configuration
"""
from django.conf.urls import url, include
from django.contrib import admin
from mysite import views as mysite_views
from emailme import views as emailme_views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^emailme/', emailme_views.emailme, name='emailme'),
url(r'^home/', mysite_views.home, name='home'),
]
base.html:
{% load crispy_forms_tags %}
<div class="modal-content">
{% csrf_token %}
{% crispy form form.helper %}
</div>
私はジャンゴ1.9、クリスピー・フォーム、およびブートストラップを使用しています。ここでエラーがある:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/home/
Django Version: 1.9.8
Python Version: 3.5.2
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'emailme',
'crispy_forms',
'bootstrap3']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Template error:
In template /home/pi/Django-bootstrap/bin/mysite/templates/base.html, error at line 77
Failed lookup for key [%s] in %r 67 :
68 :
69 :
70 : <div class="container">
71 : <!-- Modal -->
72 : <div class="modal fade" id="myModal" role="dialog">
73 : <div class="modal-dialog">
74 : <!-- Modal content-->
75 : <div class="modal-content">
76 : {% csrf_token %}
77 : {% crispy form form.helper %}
78 : </div>
79 : </div>
80 : </div>
81 : </div>
82 :
83 :
84 :
85 : <div class="container">
86 : <!-- Example row of columns -->
87 : <div class="row">
Traceback:
File "/home/pi/Django-bootstrap/lib/python3.5/site-packages/django/template/base.py" in _resolve_lookup
883. current = current[bit]
File "/home/pi/Django-bootstrap/lib/python3.5/site-packages/django/template/context.py" in __getitem__
77. raise KeyError(key)
During handling of the above exception ('form'), another exception occurred:
File "/home/pi/Django-bootstrap/lib/python3.5/site-packages/django/template/base.py" in _resolve_lookup
889. if isinstance(current, BaseContext) and getattr(type(current), bit):
During handling of the above exception (type object 'Context' has no attribute 'form'), another exception occurred:
File "/home/pi/Django-bootstrap/lib/python3.5/site-packages/django/template/base.py" in _resolve_lookup
898. current = current[int(bit)]
During handling of the above exception (invalid literal for int() with base 10: 'form'), another exception occurred:
File "/home/pi/Django-bootstrap/lib/python3.5/site-packages/django/core/handlers/base.py" in get_response
149. response = self.process_exception_by_middleware(e, request)
File "/home/pi/Django-bootstrap/lib/python3.5/site-packages/django/core/handlers/base.py" in get_response
147. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/pi/Django-bootstrap/bin/mysite/mysite/views.py" in home
13. return render_to_response('base.html')
File "/home/pi/Django-bootstrap/lib/python3.5/site-packages/django/shortcuts.py" in render_to_response
39. content = loader.render_to_string(template_name, context, using=using)
File "/home/pi/Django-bootstrap/lib/python3.5/site-packages/django/template/loader.py" in render_to_string
97. return template.render(context, request)
File "/home/pi/Django-bootstrap/lib/python3.5/site-packages/django/template/backends/django.py" in render
95. return self.template.render(context)
File "/home/pi/Django-bootstrap/lib/python3.5/site-packages/django/template/base.py" in render
206. return self._render(context)
File "/home/pi/Django-bootstrap/lib/python3.5/site-packages/django/template/base.py" in _render
197. return self.nodelist.render(context)
File "/home/pi/Django-bootstrap/lib/python3.5/site-packages/django/template/base.py" in render
992. bit = node.render_annotated(context)
File "/home/pi/Django-bootstrap/lib/python3.5/site-packages/django/template/base.py" in render_annotated
959. return self.render(context)
File "/home/pi/Django-bootstrap/lib/python3.5/site-packages/crispy_forms/templatetags/crispy_forms_tags.py" in render
214. c = self.get_render(context)
File "/home/pi/Django-bootstrap/lib/python3.5/site-packages/crispy_forms/templatetags/crispy_forms_tags.py" in get_render
107. actual_form = form.resolve(context)
File "/home/pi/Django-bootstrap/lib/python3.5/site-packages/django/template/base.py" in resolve
850. value = self._resolve_lookup(context)
File "/home/pi/Django-bootstrap/lib/python3.5/site-packages/django/template/base.py" in _resolve_lookup
905. (bit, current)) # missing attribute
Exception Type: VariableDoesNotExist at /home/
Exception Value: Failed lookup for key [form] in "[{'False': False, 'None': None, 'True': True}]"
Spot on!私はそれを上記の関数で動作させ、base.htmlの '{%include%}'ステートメント(これはもともと私がやろうとしていたものです)を使ってコンテキストプロセッサを使うことができました。その点を正しい方向に感謝します。 –