微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django下一次重定向到调用表单的方法在localhost上有效,但在生产环境中不可用

如何解决Django下一次重定向到调用表单的方法在localhost上有效,但在生产环境中不可用

我想使用“ next”参数返回到调用表单时遇到问题。我有一个带有交易清单的表格。单击其中一项交易会将我带到更新表格。更新后,它应返回到事务列表。当我使用“ manage.py runserver”运行应用程序时,这在我的本地主机上运行良好。但是,当我将代码部署到云(Pythonanywhere)上时,单击“提交”按钮不会返回到调用表单,而是让我进入更新表单。

我将问题缩小到下一个参数,即在生产过程中某个地方(而不是在本地主机中)放置一个前导斜杠(/)。

tran.html(交易列表)-此链接将更新表格与要更新的交易一起加载。这里request.get_full_path包含一个前导斜杠,例如:'/ 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>',

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缺少前导斜杠,例如'tran /'。在本地服务器上,其前导斜杠为'/ 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

解决方法

我通过检查前导斜线并在缺少斜线时添加了一个斜线来解决了这个问题。这可能是解决症状而不是路由问题,但目前仍然有效。

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')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。