在Django开发中,切片的行为与在II下运行时不同

2024-09-26 22:50:30 发布

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

我很困惑。我有一个列表视图,它提供到详细视图的链接。我希望细节视图能够返回(调用)列表视图。有一些原因,一个普通的后退按钮不会做的把戏;因此,我决定通过将request.path分配给名为last\u page的参数来提供列表视图到detail页的url

如果我在Django开发环境中的端口8000上运行,最后一页| slice:'1:'将从变量中删除前导的“/”。当我在IIS(10)下运行相同的代码时,我必须使用最后一页|切片:'0:'来执行相同的操作,否则当我尝试在我的详细信息模板中使用最后一页时,会出现NoReverseMatch错误。我在Windows Server 2016计算机上的两种环境中都会出现这种行为(Python 3.7.3、Django 2.2.5、wfastcgi 3.0)

在我的列表视图模板中,我的URL如下所示:

href="{% url 'a-detail' pk=s.s_id last_page=request.path %}" 

在我的detail模板中,我用于back按钮的代码如下所示(这是切片从request.path中删除初始“/”):

<script>
document.write('<a href="{% url last_page|slice:'1:' %}">Go Back</a>')
</script>

在我的url.py文件中,我正在使用这些url路径(不再需要不传递参数的路径):

path('<int:pk>', views.ADetailView.as_view(), name='a-detail'),
path('<int:pk>/<path:last_page>', views.ADetailView.as_view(), name='a-detail'),

“我的详细信息”页的views.py文件如下所示:

class ADetailView(LoginRequiredMixin, DetailView):
model = Base
template_name = 'a_detail.html'

# Handles form that changes status
def post(self, request, pk, last_page=2):
    obj = SChanges.objects.get(pk=pk)
    obj.status = SStatus.objects.get(status_id=request.POST.get('status'))
    obj.save()
    return HttpResponseRedirect(reverse('a-detail', kwargs={'pk': pk, 'last_page':last_page}))

def get_context_data(self, **kwargs):
    context = super(ADetailView, self).get_context_data(**kwargs)
    context['last_page'] = self.kwargs.get('last_page')
    return context

我本来希望|切片:在两种环境下都能工作。有人能解释一下为什么我必须在Django开发环境中使用“1”,在IIS中使用“0”

谢谢--


Tags: pathself视图url列表get环境request

热门问题