Django表单提交失败

时间:2014-07-31 19:25:56

标签: python html django forms

我正在制作一个小应用程序,可让您保存有关您所在地点的具体位置信息。我遇到的问题是点击“保存新位置”按钮上的“提交”按钮。页面似乎没有做任何事情。它重定向到... / locationlib / savenew /,它应该是将表单输入保存为新模型对象的url,但是根据调试打印语句和实际发生的事情,该函数永远不会被调用。我使用django在其他形式上取得了成功,但是这个似乎正在绊倒我。有人能告诉我这里发生了什么吗?

views.py

def new(request):
    return render(request, 'locationlib/new.html')

def savenew(request):
    print 'savenew called'
    name = request.POST['name']
    latitude = float(request.POST['latitude'])
    longitude = float(request.POST['longitude'])
    desc = request.POST['description']
    user = User.objects.get(username=str(request.POST['user']))
    print 'all variables set'
    l = Location(
        name=name, 
        longitude=longitude, 
        latitude=latitude, 
        custDescription=desc, 
        user=user,
     )
    print 'l defined'
    l.save()
    print 'l saved'
    return HttpResponseRedirect(reverse('locationlib:detail', args=[l.id]))

new.html

<div id='new-location-form'>
    <form action="{% url 'locationlib:savenew' %}" method="post">
        {% csrf_token %}
        Name: <input type='text' name='name' value='Place Name' required><br>
        User: <input type='text' name='user' value='User' required><br>
        Longitude: <input type='text' name='longitude' value="Longitude Coordinate" required><br>
        Latitude: <input type='text' name='latitude' value='Latitude Coordinate' required><br>
        Description: <textarea name='description'>Description of Place</textarea><br>
        <input type="submit" value="Save">
    </form>
</div>

urls.py

urlpatterns = patterns( '',
    ...
    url(r'new/', views.new, name='new'),
    url(r'^savenew/', views.savenew, name='savenew'),
    )

2 个答案:

答案 0 :(得分:1)

您的第一个网址格式new不会锚定到字符串的开头。这意味着它匹配结束与“new”的任何内容 - 包括“savenew”。因此,您对“savenew”的请求被该模式捕获,并被发送到新视图。

只需将^字符放在前面,就像使用其他模式一样。

答案 1 :(得分:0)

尝试使用Modelforms

forms.py:

from django.forms import ModelForm
from myapp.models import Location

# Create the form class.

class LocationForm(ModelForm):
     class Meta:
         model = Location

view.py

def savenew(request):
if request.method == 'POST':
    form = LocationForm(request.POST)
    if form.is_valid():

        new=form.save()

        return HttpResponseRedirect(reverse(reverse('locationlib:detail', args=[new.id])))
    return render(request,'reservetion/sign.html',{'form': form})
else:
    form = SignForm()
    return render(request, 'reservetion/sign.html',{'form': form})         

new.html

  <form action="{% url 'locationlib:savenew' %}" method="post">
    {% csrf_token %}
     {{ form}}
</form>