回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我试图在我的网站上通过POST发送一个表单,但是,似乎POST URL的第一部分被切掉了,导致它无法匹配正确的URL。在</p>
<p>我要在模板中发送的表单:</p>
<pre><code><form action= "{% url 'change_portrait' %}" method="post">
{% csrf_token %}
<h5>Edit Portrait</h5>
<input type="hidden" name="portrait_id" value="{{image.pk}}">
<button type="submit" name="button" class="btn btn-primary">Submit Changes</button>
</form>
</code></pre>
<p>正确呈现为:</p>
^{pr2}$
<p>操作URL是正确的,并且是我希望表单提交到的位置。但是,当提交表单时,我收到404,并显示以下消息:</p>
<pre><code>Using the URLconf defined in ZachWebsite.urls, Django tried these URL patterns, in this order:
^admin/
^AdminDashboard/
^ ^SundayPortraits/ [name='sunday_portraits']
^ ^Contact/ [name='contact_submission']
^ ^SubmitOrder/ [name='submit_buy_order']
^ ^BuyPrint/ [name='buy_print']
^ ^$ [name='index']
^ ^Login [name='login']
^ ^Logout [name='logout']
^ ^media\/(?P<path>.*)$
The current URL, EditPortraits/ChangePortrait/, didn't match any of these.
</code></pre>
<p>这是我的基地网址.py在</p>
<pre><code>urlpatterns = [
url(r'^AdminDashboard/', include('AdminDashboard.urls')),
url(r'^', include('mainApp.urls'))
]
</code></pre>
<p>以及AdminDashboard.url公司名称:</p>
<pre><code>urlpatterns = [
url(r'^EditPortraits/ChangePortrait/', views.change_portrait, name='change_portrait'),
url(r'^EditPortraits/', views.edit_portraits, name='edit_portraits'),
url(r'^', views.dashboard, name='dashboard'),
]
</code></pre>
<p>出于某种原因,我不知道提交表单会切断初始的'/AdminDashboard/',只对剩余的url“editHightalics/ChangePortrait/”进行测试。这当然会导致它跳过基中的第一个url模式网址.py(它应该去哪里),而是与catch all第二个url匹配,随后无法匹配中的所有urlmainApp.url. 我一辈子都搞不懂为什么提交表单会切断操作URL的第一部分。它在内置django开发服务器上按预期工作,但在部署到生产服务器时失败。在</p>
<p>任何帮助都将不胜感激。在</p>
<p>编辑</p>
<p>在mainApp.url(这些是跟踪中显示的内容,但首先不应尝试):</p>
<pre><code>urlpatterns = [
url(r'^SundayPortraits/', views.sunday_portraits, name='sunday_portraits'),
url(r'^Contact/', views.contact, name='contact_submission'),
url(r'^SubmitOrder/', views.submit_buy_order, name='submit_buy_order'),
url(r'^BuyPrint/', views.buy_print, name='buy_print'),
url(r'^$', views.index, name='index'),
url(r'^Login', views.login, name='login'),
url(r'^Logout', views.logout, name='logout')
]
</code></pre>
<p>在views.change_纵向公司名称:</p>
<pre><code>def change_portrait(request):
return HttpResponse('in')
</code></pre>
<p>这永远不会显示,也就是说它永远无法进入视野。在</p>
<p>编辑2:</p>
<p>还应注意,提交表单时,我浏览器中的url是正确的:即显示'mysite.com/AdminDashboard/editHightalights/ChangePortrait/'. 出于某种原因,Django说当前的URL是'/editHights/ChangePortrait/'。如果我转到那个网址('mysite.com/AdminDashboard/editHightalights/ChangePortrait/'在我的浏览器中,它会定期正确地加载页面。只有当我试图发布到那个页面时,它才会失败。在</p>
<p>编辑3:</p>
<p>可以更新视图以正确接受POST变量,如下所示:</p>
<pre><code>def change_portrait(request):
portrait_id = request.POST.get('portrait_id', None)
return HttpResponse('in')
</code></pre>
<p>但是错误仍然存在。在</p>
<p>编辑4:</p>
<p>呈现模板的视图:</p>
<pre><code>def edit_portraits(request):
if not request.session.get('logged_in', None):
return redirect('../')
portraits = Portrait.objects.filter(isSundayPortrait=True)
context = {'portraits': portraits,
'SundayPortraits': True}
return render(request, 'AdminDashboard/editportraits.html', context)
</code></pre>
<p>正在移动url(r“^editHighraits/ChangePortrait/”,views.change_纵向,name='change_portrait')至mainApp.url(尝试匹配的位置)结果mainApp.url公司名称:</p>
<pre><code>urlpatterns = [
url(r'^SundayPortraits/', views.sunday_portraits, name='sunday_portraits'),
url(r'^Contact/', views.contact, name='contact_submission'),
url(r'^SubmitOrder/', views.submit_buy_order, name='submit_buy_order'),
url(r'^BuyPrint/', views.buy_print, name='buy_print'),
url(r'^$', views.index, name='index'),
url(r'^EditPortraits/ChangePortrait/$', views.change_portrait, name='change_portrait'),
url(r'^Login', views.login, name='login'),
url(r'^Logout', views.logout, name='logout')
]
</code></pre>
<p>在mainApp.views.change_纵向公司名称:</p>
<pre><code>def change_portrait(request):
if request.method == 'POST':
return HttpResponse('POST')
else:
return HttpResponse('GETTING')
</code></pre>
<p>使用与最初显示的相同的表单,执行get请求会导致HttpResponse“GETTING”。将窗体更改为POST请求将导致新的堆栈跟踪:</p>
<pre><code>Request Method: POST
Request URL: http://www.example.com/EditPortraits/ChangePortrait/
Raised by: mainApp.views.change_portrait
Using the URLconf defined in ZachWebsite.urls, Django tried these URL patterns, in this order:
^admin/
^AdminDashboard/
^ ^SundayPortraits/ [name='sunday_portraits']
^ ^Contact/ [name='contact_submission']
^ ^SubmitOrder/ [name='submit_buy_order']
^ ^BuyPrint/ [name='buy_print']
^ ^$ [name='index']
^ ^EditPortraits/ChangePortrait/ [name='change_portrait']
^ ^Login [name='login']
^ ^Logout [name='logout']
^ ^media\/(?P<path>.*)$
The current URL, ChangePortrait/, didn't match any of these.
</code></pre>
<p>移动到mainApp.url(它应该在哪里捕捉它)现在切断了url“EditPortrait/”的第一部分,现在只对“ChangePortrait/”进行测试</p>