python - Django 1.8 AttributeError: 'dict' object has no attribute 'push' -


here traceback:

environment:   request method: request url: http://127.0.0.1:8000/myapp/addinterest/  django version: 1.8.2 python version: 2.7.8 installed applications: ('django.contrib.admin',  'django.contrib.auth',  'django.contrib.contenttypes',  'django.contrib.sessions',  'django.contrib.messages',  'django.contrib.staticfiles',  'myapp') installed middleware: ('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',  'django.middleware.security.securitymiddleware')   traceback: file "/library/python/2.7/site-packages/django/core/handlers/base.py" in get_response   132.                     `response = wrapped_callback(request, *callback_args, **callback_kwargs)` file "/library/python/2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view   22.                 `return view_func(request, *args, **kwargs)` file "/~/myapp/views.py" in add_interest   155.     `return render_to_response('add_interests.html', context, {'form': form})` file "/library/python/2.7/site-packages/django/shortcuts.py" in render_to_response   45.             `using=using)` file "/library/python/2.7/site-packages/django/template/loader.py" in render_to_string   116.                         `template_name, context, context_instance, dirs, dictionary)` file "/library/python/2.7/site-packages/django/template/engine.py" in render_to_string   220.         `with context_instance.push(context):`  exception type: attributeerror @ /myapp/addinterest/ exception value: 'dict' object has no attribute 'push' 

here's code:

url:url(r'^addinterest/$', views.add_interest, name='add_interest'),

view:

@login_required def add_interest(request):     context = requestcontext(request)      if request.method == 'post':         #create form instance , populate data request         form = interestform(request.post)         if form.is_valid():             #process data in form.clean_data             interest = form.cleaned_data['interest']             user.add_interest(interest)             return httpresponseredirect('add_interests.html', context)     else:         form=interestform()      return render_to_response('add_interests.html', context, {'form': form}) 

form:

class interestform(forms.form):     interest = forms.charfield(label="enter new interest:", max_length=100)` 

template:

<div class="container">   <h1>add interests</h1> </div> <!-- /container --> <div class="container">   list:   <ul>{% in user.profile.interests %}   <li>{{i}} <button type="button">remove interest</button>   {% endfor %}</ul> </div> <!-- /container --> <div class ="container">   <form action="{% url add_interest %}" method="post">     {% csrf_token %}     {{ form }}     <input type="submit" value="add interest" />   </form> </div> 

i'm new django, i'm assuming simple fix couldn't find other questions 'dict' object has no attribute 'push'.

my interest field part of user profile model. interest field listview i've seen used lot of times on here.

class listfield(models.textfield):     __metaclass__ = models.subfieldbase     description = "stores python list"      def __init__(self, *args, **kwargs):         super(listfield, self).__init__(*args, **kwargs)      def to_python(self, value):         if not value:             value = []          if isinstance(value, list):             return value          return ast.literal_eval(value)      def get_prep_value(self, value):         if value none:             return value          return unicode(value)      def value_to_string(self, obj):         value = self._get_val_from_obj(obj)         return self.get_db_prep_value(value) 

in userprofile model, here add , remove interest. doubt reason of issue, in case, here functions.

class userprofile(models.model):       interests = listfield(blank=true)       def add_interest(self, value):         self.interests.insert(len(self.interests)+1, value)         #self.save()     def remove_interest(self, value):         self.interests.remove(value)         #self.save() 

you got render_to_response() arguments mixed up:

return render_to_response('add_interests.html', context, {'form': form}) 

the documentation tells second argument dictionary, 3rd context instance, swapped them.

best use context_instance argument keyword argument:

return render_to_response('add_interests.html', {'form': form}, context_instance=context) 

Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -