【发布时间】:2021-02-22 13:46:12
【问题描述】:
当我想使用“next”参数返回调用表单时遇到问题。我有一个包含交易清单的表格。单击其中一项交易会将我带到更新表单。进行更新后,它应该返回到事务列表。当我使用“manage.py runserver”运行我的应用程序时,这在我的本地主机上运行良好。但是,当我将代码部署到云 (Pythonanywhere) 时,单击提交按钮不会返回调用表单,而是让我保持在更新表单上。
我已将问题缩小到下一个参数,在生产过程中的某处删除了前导斜杠 (/),但在本地主机中没有。
tran.html(交易列表) - 此链接加载更新表单以及要更新的交易。这里 request.get_full_path 包含一个前导斜杠 ex:'/tran/'
<td><a href="{% url 'fin:tran_update' t.id request.get_full_path %}">{{ t.omerchant }}
url.py
path('tran_update/<int:pk>', views.TranUpdateView.as_view(), name='tran_update'),
path('tran_update/<int:pk>/<path:next>', views.TranUpdateView.as_view(), name='tran_update'),
view.py
class TranUpdateView(UpdateView):
model = AccountTran
form_class = AccountTranForm
template_name = 'fin/tran_update.html'
context_object_name = 'tran'
def get_success_url(self, **kwargs):
print('get_success_url - in TranUpdateview')
if 'next' in self.kwargs:
next_url = self.kwargs['next']
print('next_url:', next_url)
return next_url
return reverse_lazy('fin:tran')
从生产环境运行时,next_url 缺少前导斜杠 ex:'tran/'。在本地服务器上,它具有前导斜杠 ex:'/tran/'。
在生产中,当我单击更新视图中的提交按钮时,它不会返回列表视图,而是停留在更新视图上,并且 url 更改为:
https://fin.mysite.com/tran_update/4890//tran/tran/
如果我再次点击提交,它会变为:
https://fin.mysite.com/tran_update/4890//tran/tran/tran/tran/
我无法弄清楚前导斜线是如何被删除的。
我在本地使用 Django 2.2.4、Python 3.8.2,在云端使用 Python 3.7
【问题讨论】:
-
添加相关表格的代码,您可能还想查看stackoverflow.com/questions/16750464/…
-
我将问题缩小到下一个参数,在生产中运行时在 html 和视图之间删除前导斜杠 (/)。我无法弄清楚这是如何在 prod 中发生的,但在本地主机的本地计算机上运行时却没有。 #AzyC