2016-11-10 1 views
2

konvertieren. Ich kämpfe darum, dieses herauszufinden. Ich habe mehrere Probleme gesehen, bei denen dieser Fehlercode auftaucht, aber alle scheinen damit zu tun zu haben, dass Daten nicht in den Kontext übergeben werden, damit die Vorlage gerendert werden kann. Ich weiß, dass meine Daten die Vorlage erreichen. Knusprige Formen müssen etwas hinter den Kulissen tun, das mich abwirft? Sonderbare Sache ist das vor 20 Minuten buchstäblich gearbeitet. Ich weiß nicht, was ich hätte ändern können, das hätte das beeinflusst.Django Crispy Forms Rendering Issue 'kann das Wörterbuchaktualisierungssequenzelement # 0 nicht in eine Sequenz'

Hier ist meine Ansicht:

class ContactListView(View): 

    template = 'support_tracker/contact_list.html' 

    def get(self,request,*args,**kwargs): 
     staff_id = kwargs.pop('staff_id',False) 

     if staff_id: 
      staff = Staff.objects.get(pk=staff_id) 
     else: 
      staff = request.user.staff 
     contact_list = staff.contacts.all() 

     search_term = request.GET.get('search_term',False) 
     sort_by = request.GET.get('sort_by',False) 
     filter_by = request.GET.get('filter_by',False) 

     ##applying search term to determine contact_list 
      ... 
     ## 

     ##sorting of contact_list 
      .... 
     ## 

     ##filtering of contact_list 
      .... 
     ## 

     search_form = SearchForm() 
     sort_form = ContactListSortForm() 
     filter_form = FilterByStageForm() 

     ##pagination to determine contacts 
      ... 
     ## 

     context = { 
     'staff':staff, 
     'contacts':contacts, 
     'search_form':search_form, 
     'sort_form':sort_form, 
     'filter_form':filter_form, 
     'filter_by':filter_by, 
     'search_term':search_term, 
     'sort_by':sort_by, 
     } 

     print context 

     return render(request,self.template,context) 

Meine Formulare:

##forms.py 
class SearchForm(forms.Form): 
    search_term = forms.CharField(max_length=30,label='') 

    def __init__(self,*args,**kwargs): 
     super(SearchForm,self).__init__(*args,**kwargs) 
     self.helper = FormHelper() 
     self.helper.form_class = 'form-inline' 
     self.helper.form_method = 'GET' 
     self.helper.field_template = 'bootstrap3/layout/inline_field.html' 
     self.helper.layout = Layout(
      InlineField('search_term',placeholder='Search'), 
      Submit('','Go',css_class='btn btn-primary'), 
      ) 

class FilterByStageForm(forms.Form): 
     filter_by = forms.ChoiceField(choices=get_stage_option_list(),required=False) 

    def __init__(self,*args,**kwargs): 
     super(FilterByStageForm,self).__init__(*args,**kwargs) 
     self.helper = FormHelper() 
     self.helper.form_class = 'form-inline' 
     self.helper.form_method = 'GET' 
     self.helper.field_template = 'bootstrap3/layout/inline_field.html' 
     self.helper.layout = Layout(
      InlineField('filter_by',placeholder='Filter By'), 
      Submit('','Filter',css_class='btn btn-primary'), 
      ) 

class ContactListSortForm(forms.Form): 
    sort_by = forms.ChoiceField(choices=(##options),required=False) 

    def __init__(self,*args,**kwargs): 
     super(ContactListSortForm,self).__init__(*args,**kwargs) 
     self.helper = FormHelper() 
     self.helper.form_class = 'form-inline' 
     self.helper.form_method = 'GET' 
     self.helper.field_template = 'bootstrap3/layout/inline_field.html' 
     self.helper.layout = Layout(
      InlineField('sort_by',placeholder='Sort By'), 
      Submit('','Sort',css_class='btn btn-primary'), 
      ) 

Meine Vorlage:

{% extends 'co_tools/base.html' %} 
{% load crispy_forms_tags %} 

{% block content %} 
<div class='container'> 
    <div class='col-md-3 well'> 
     <h3><u>Search:</u></h3> 


     ## This is the part that trips it up. If I take the forms out, the rest of the page loads fine 
     {% crispy search_form %} 
     {% crispy sort_form %} 
     {% crispy filter_form %} 


     <a href='/support/new_contact/' class='btn btn-primary'>New Contact</a> 
    </div> 

    ...body... 

</div> 
{% endblock content %} 

Der vollständige Zurückverfolgungs

Request Method: GET 
Request URL: http://127.0.0.1:8000/support/contact_list/ 

Django Version: 1.10.2 
Python Version: 2.7.11 
Installed Applications: 
['django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'crispy_forms', 
'support_tracker', 
'donor_reports', 
'staff', 
'financial_reports'] 
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.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 


Template error: 
In template C:\...\project\support_tracker\templates\support_tracker\contact_list.html, error at line 8 
    cannot convert dictionary update sequence element #0 to a sequence 1 : {% extends 'co_tools/base.html' %} 
    2 : {% load crispy_forms_tags %} 
    3 : 
    4 : {% block content %} 
    5 : <div class='container'> 
    6 : <div class='col-md-3 well'> 
    7 :  <h3><u>Search:</u></h3> 
    8 :  {% crispy form %} 
    9 :  <a href='/support/new_contact/' class='btn btn-primary'>New Contact</a> 
    10 :  </div> 
    11 :  <div class='col-md-9'> 
    12 :   <table class='table table-condensed table-hover'> 
    13 :    <thead> 
    14 :     <th>Contact Name</th> 
    15 :     <th>Phone Number</th> 
    16 :     <th>Email</th> 
    17 :     <th>Street Address</th> 
    18 :     <th>City</th> 


Traceback: 

File "C:\...\project\env\lib\site-packages\django\core\handlers\exception.py" in inner 
    39.    response = get_response(request) 

File "C:\...\project\env\lib\site-packages\django\core\handlers\base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "C:\...\project\env\lib\site-packages\django\core\handlers\base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "C:\...\project\env\lib\site-packages\django\views\generic\base.py" in view 
    68.    return self.dispatch(request, *args, **kwargs) 

File "C:\...\project\env\lib\site-packages\django\views\generic\base.py" in dispatch 
    88.   return handler(request, *args, **kwargs) 

File "C:\...\project\support_tracker\views.py" in get 
    185.  return render(request,self.template,context) 

File "C:\...\project\env\lib\site-packages\django\shortcuts.py" in render 
    30.  content = loader.render_to_string(template_name, context, request, using=using) 

File "C:\...\project\env\lib\site-packages\django\template\loader.py" in render_to_string 
    68.  return template.render(context, request) 

File "C:\...\project\env\lib\site-packages\django\template\backends\django.py" in render 
    66.    return self.template.render(context) 

File "C:\...\project\env\lib\site-packages\django\template\base.py" in render 
    208.      return self._render(context) 

File "C:\...\project\env\lib\site-packages\django\template\base.py" in _render 
    199.   return self.nodelist.render(context) 

File "C:\...\project\env\lib\site-packages\django\template\base.py" in render 
    994.     bit = node.render_annotated(context) 

File "C:\...\project\env\lib\site-packages\django\template\base.py" in render_annotated 
    961.    return self.render(context) 

File "C:\...\project\env\lib\site-packages\django\template\loader_tags.py" in render 
    174.   return compiled_parent._render(context) 

File "C:\...\project\env\lib\site-packages\django\template\base.py" in _render 
    199.   return self.nodelist.render(context) 

File "C:\...\project\env\lib\site-packages\django\template\base.py" in render 
    994.     bit = node.render_annotated(context) 

File "C:\...\project\env\lib\site-packages\django\template\base.py" in render_annotated 
    961.    return self.render(context) 

File "C:\...\project\env\lib\site-packages\django\template\loader_tags.py" in render 
    70.     result = block.nodelist.render(context) 

File "C:\...\project\env\lib\site-packages\django\template\base.py" in render 
    994.     bit = node.render_annotated(context) 

File "C:\...\project\env\lib\site-packages\django\template\base.py" in render_annotated 
    961.    return self.render(context) 

File "C:\...\project\env\lib\site-packages\crispy_forms\templatetags\crispy_forms_tags.py" in render 
    215.   c = self.get_render(context) 

File "C:\...\project\env\lib\site-packages\crispy_forms\templatetags\crispy_forms_tags.py" in get_render 
    126.   response_dict = self.get_response_dict(helper, context, is_formset) 

File "C:\...\project\env\lib\site-packages\crispy_forms\templatetags\crispy_forms_tags.py" in get_response_dict 
    160.   attrs = helper.get_attributes(template_pack=self.template_pack) 

File "C:\...\project\env\lib\site-packages\crispy_forms\helper.py" in get_attributes 
    364.   if self.form_action: 

File "C:\...\project\env\lib\site-packages\crispy_forms\helper.py" in form_action 
    237.    return reverse(self._form_action) 

File "C:\...\project\env\lib\site-packages\django\urls\base.py" in reverse 
    91.  return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))) 

File "C:\...\project\env\lib\site-packages\django\urls\resolvers.py" in _reverse_with_prefix 
    344.    self._populate() 

File "C:\...\project\env\lib\site-packages\django\urls\resolvers.py" in _populate 
    217.          dict(defaults, **pattern.default_kwargs), 

Exception Type: TypeError at /support/contact_list/ 
Exception Value: cannot convert dictionary update sequence element #0 to a sequence 

Ich habe keine Ahnung, was das verursacht. Jede Hilfe würde sehr geschätzt werden.

+0

Also nur als ein Update für weitere Informationen, finde ich, dass ich diesen Fehler jedes Mal bekomme, wenn ich '{% knusprige Form%}' verwendet, um ein Formular in einer Vorlage zu rendern. – Nikolai0045

Antwort

0

Ok das Problem gelöst. Ich habe keine Ahnung, warum dieses spezielle Bit des Codes das Problem verursacht hat.

In meinem urls.py hatte ich die folgenden vier url Ausdrücke hinzugefügt ...

von django.conf.urls Import-URL, sind Import Ansichten

urlpatterns = [ 
    ... 
    #meeting urls 
    url(r'^record_meeting/(?P<meeting_id>[0-9]+)/',views.EditMeetingView.as_view(),{'record':True}), 
    url(r'^record_meeting/$',views.EditMeetingView.as_view(),{'record':True}), 
    url(r'^edit_meeting/(?P<meeting_id>[0-9]+)/',views.EditMeetingView.as_view(),{'record':False}), 
    url(r'^add_meeting/$',views.EditMeetingView.as_view()), 
] 

Der vierte war ursprünglich url(r'^add_meeting/$',views.EditMeetingView.as_view(),{'record':False}), die anscheinend, basierend auf Versuch und Irrtum, das Problem verursacht hat. Nach dem Entfernen der zusätzlichen Argumente ging das Problem weg. Weiß jemand, warum das überhaupt ein Problem war? Ich verstehe es immer noch nicht.

Verwandte Themen