Django下一步重定向到调用表单在本地主机上工作,但在生产环境中不工作

2024-10-01 00:15:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我已经将问题缩小到了下一个参数,在生产过程中的某个地方删除了前导斜杠(/),但在本地主机中没有

tran.html(事务列表)-此链接加载包含要更新的事务的更新表单。此处request.get_full_路径包含一个前导斜杠,例如:'/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')

从生产运行时,下一个url缺少前导斜杠,例如:“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


Tags: pathnamepyurl表单列表getupdate
1条回答
网友
1楼 · 发布于 2024-10-01 00:15:05

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

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

相关问题 更多 >