【问题标题】:Django next redirect to calling form works on localhost but not in productionDjango下一个重定向到调用表单在本地主机上工作,但不在生产环境中
【发布时间】: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

标签: python django


【解决方案1】:

我通过检查前导斜杠并在缺少时添加一个来解决此问题。这可能是在修复一个症状而不是路由问题,但它现在有效。

def get_success_url(self, **kwargs):
    print('get_success_url - in TranUpdateview')
    if 'next' in self.kwargs:
        next_url = self.kwargs['next']
        if not next_url.startswith('/'):
            next_url = '/' + next_url
        print('next_url:', next_url)
        return next_url
    return reverse_lazy('fin:tran')

【讨论】:

    猜你喜欢
    • 2020-08-16
    • 2018-08-01
    • 2015-04-26
    • 1970-01-01
    • 2020-04-21
    • 2016-07-16
    • 2018-03-23
    • 1970-01-01
    相关资源
    最近更新 更多