【问题标题】:Reverse redirecting and parsing a variable in Django在 Django 中反向重定向和解析变量
【发布时间】:2018-10-27 19:00:36
【问题描述】:

我有一个功能考虑到触发变量为真,用户被重定向到不同的页面:

def first_function(request):
    if settings.TRIGGER:        
        with transaction.atomic(): 
            if not order_lock.can_edit(request.user): 
                is_locked = not order_lock.can_edit(request.user) 
                from django.core.urlresolvers import reverse
                return HttpResponseRedirect(reverse(some_function))
            else:
                is_locked = False
                order_lock.lock_edit(request.user)



    def some_function(request):
        orders = Order.objects.all().order_by('status','created')

        return render(
            request,
            'myapp/index.html',
            {
                'orders': orders,
            },
        )

问题是我尝试了将变量 is_locked 解析为 return HttpResponseRedirect(reverse(some_function)) 的各种排列方式 但无济于事,让我的some_function 适应:

    def some_function(request, is_updated=None):
        orders = Order.objects.all().order_by('status','created')

        return render(
            request,
            'myapp/index.html',
            {
                'orders': orders,
                'is_updated': is_updated,
            },
        )

有没有办法解决这个问题,以便可以在反向重定向时解析 is_updated 变量?目的是在 html 中触发(由于 is_updated)一个通知用户的弹出窗口。

编辑:

view.py

def edit_order(request, id = None, order_id = None)
    with transaction.atomic():
        order_lock = get_object_or_404(Order.objects.select_for_update(), id=id)
        if not order_lock.can_edit(request.user): 
            is_locked = not order_lock.can_edit(request.user) 
            from django.shortcuts import redirect
            from django.core.urlresolvers import reverse
            return redirect(idx_order, kwargs={'is_locked': is_locked}) # Use this when url matter is resolved


def idx_order(request, is_locked=None):
    orders = Order.objects.all().order_by('status','deadline','created','lastUpdate').exclude(status=2)
    return render(
        request,
        'myapp/index_pimped.html',
        {
            'is_locked': is_locked
        },
    )

urls.py

url(r'^$', idx_order, name='idx_order'), # This works fine....
#url(r'^(?P<is_locked>[-\w]+)/$', idx_order, name='idx_order'), # ...but this doesn't

【问题讨论】:

    标签: django-views httpresponse http-redirect django-1.11


    【解决方案1】:

    请尝试以下代码
    你需要

    url(r'^result/(?P<result>[^\/]*)/$', views.result, name='result'),
    

    return redirect(reverse('many:result', kwargs={ 'result': result }))
    

    或(不改变网址)

    return redirect('/result/?p=%s' % result )
    

    如何使用重定向。

    from django.shortcuts import redirect
    
    def computer(request):
        result =  Computer.objects.order_by('?')[:1]
        return redirect('view-name-you-want', { 'result'=result })
    

    【讨论】:

    • 你将如何使用我上面的例子来解决这个问题,特别是使用相同的参数名称?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多