我正在制作一个小应用程序,可让您保存有关您所在地点的具体位置信息。我遇到的问题是点击“保存新位置”按钮上的“提交”按钮。页面似乎没有做任何事情。它重定向到... / 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'),
)
答案 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
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})
<form action="{% url 'locationlib:savenew' %}" method="post">
{% csrf_token %}
{{ form}}
</form>