python - Form input-box not displaying -
i'm trying display simple form input-text box django. i'm deploying on amazon aws. site works fine on different server (pythonanywhere) there major problem on aws. specifically, input box not being displayed. i'm using templates follows:
home.html
{% extends 'lists/base.html' %} {% block header_text %}start new to-do list {% endblock %} {% block form_action %}{% url 'new_list' %}{% endblock %}
base.html
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="x ua-compatible" content="ie-edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>to-do lists</title> <link href="/static/bootstrap/css/bootstrap.min.css" rel="stylesheet"> <link href="/static/base.css" rel="stylesheet"> </head> <body> <div class="container"> <div class="row"> <div class="col-md-6 col-md-offset-3 jumbotron"> <div class="text-center"> <h1>{% block header_text %}{% endblock %}</h1> <form method="post" action="{% block form_action %}{% endblock %}"> {{ form.text }} {% csrf_token %} {% if form.errors %} <div class = "form-group has-error"> <span class = "help-block">{{ form.text.errors }}</span> </div> {% endif %} </form> </div> </div> </div> <div class="row"> <div class="col-md-6 col-md-offset-3"> {% block table %} {% endblock %} </div> </div> </div> </body> </html>
models.py
from django.db import models django .core.urlresolvers import reverse class list(models.model): def get_absolute_url(self): return reverse('view_list', args=[self.id]) # create models here. class item(models.model): text = models.textfield(default = '') list = models.foreignkey(list, default = none) #list = models.foreignkey(list , default=none)
forms.py
from django import forms lists.models import item empty_item_error = "you can't have empty list item" class itemform(forms.models.modelform): class meta: model = item fields = ('text',) widgets ={ 'text' : forms.fields.textinput(attrs={ 'placeholder': 'enter to-do item', 'class': 'form-control input-lg', }), } error_messages = { 'text' : { 'required': empty_item_error } }
views.py
from django.shortcuts import redirect, render lists.models import item, list django.core.exceptions import validationerror lists.forms import itemform lists.models import item, list # create views here. def home_page(request): return render(request, 'lists/home.html', {'form': itemform()})
urls.py
from django.conf.urls import url lists import views urlpatterns = [ url(r'^new$', views.new_list, name='new_list'), url(r'^(\d+)/$', views.view_list, name='view_list'), ]
currently site displays following:
however should (and on different website) display this:
i've pushed/pulled entire project github , code between each site identical, yet i'm not seeing why text input isn't displayed, unless form needs initialized in django somehow or quirk aws?
when comparing 2 sites, 1 without text-box not generate following:
<input class="form-control input-lg" id="id_text" name="text" placeholder="enter to-do item" type="text" />
even though should, per base.html syntax.
updated
the full views.py (per suggested comment) is:
from django.shortcuts import redirect, render lists.models import item, list django.core.exceptions import validationerror lists.forms import itemform lists.models import item, list # create views here. def home_page(request): return render(request, 'lists/home.html', {'form': itemform()}) def new_list(request): form = itemform(data=request.post) if form.is_valid(): list_ = list.objects.create() item.objects.create(text=request.post['text'], list=list_) return redirect(list_) else: return render(request, 'lists/home.html', {"form": form}) def view_list(request, list_id): list_ = list.objects.get(id=list_id) form = itemform() if request.method == 'post': form = itemform(data=request.post) if form.is_valid(): item.objects.create(text=request.post['text'], list=list_) return redirect(list_) return render(request, 'lists/list.html', {'list': list_, "form": form})
in experience django, there 2 things (always?) need static files "refresh" after pushing them remote server:
- run
./manage.py collectstatic
make sure static files in right place. - while
ssh
ed server run commandsudo reboot now
restart server (note kick out of ssh session, , server unreachable moment - few seconds in case).
as step 2 there might better way this, in experience, when update static files updated version not served until this, , restarting nginx
or not sufficient changes take effect. note mean site, if live, not reachable few seconds while server restarting (which makes me think there might better way it) me , small user base not big issue.
from reading other posts static files not updating, seems case browser caching static files, , restarting browser/clearing cache might trick well, have not had chance try yet.
Comments
Post a Comment