Django:如何随机为用户分配三个URL中的一个?

时间:2014-08-22 16:09:46

标签: python django

我有一个问题,我几天都在苦苦挣扎。

我需要随机将用户分配到三个不同的调查之一。每项调查都包含在SessionWizardView中。我一直试图找出如何在用户点击我已经包含在<form>

中的开始按钮时分配用户

的start.html

<form action="" method="get">
<a class="btn btn-success">START</a>
</form>

urls.py

我的URLconf用于起始页面和每个SessionWizardViews

url(r'^start/$', survey_views.start),

url(r'^surveyone/$', SurveyWizardOne.as_view([SurveyFormA, SurveyFormB, SurveyFormC, SurveyFormD ])),
url(r'^surveytwo/$', SurveyWizardTwo.as_view([SurveyFormA, SurveyFormB, SurveyFormC, SurveyFormD ])),
url(r'^surveythree/$', SurveyWizardThree.as_view([SurveyFormA, SurveyFormB, SurveyFormC, SurveyFormD ])),

views.py

def start(request):
    return render(request, 'start.html')

class SurveyWizardOne(SessionWizardView):
    def done(self, form_list, **kwargs):       
        return render_to_response('Return_to_AMT.html', {
            'form_data': [form.cleaned_data for form in form_list],
        })

class SurveyWizardTwo(SessionWizardView):
    def done(self, form_list, **kwargs):          
        return render_to_response('Return_to_AMT.html', {
            'form_data': [form.cleaned_data for form in form_list],
        })

class SurveyWizardThree(SessionWizardView):
 def done(self, form_list, **kwargs):       
     return render_to_response('Return_to_AMT.html', {
         'form_data': [form.cleaned_data for form in form_list],
     }) 

我不确定从哪里开始。我完全很困惑如何将URL返回给用户,我希望这是有道理的。我是Django / Python的新手,之前从未使用过MCV框架。

我能够弄清楚它的随机方面,就像我几年前在Java中做过的那样,但它只是在一个自包含的程序中。在这种情况下,我甚至不确定应该去哪里

1 个答案:

答案 0 :(得分:4)

您可以使用内置的django random模板过滤器(https://docs.djangoproject.com/en/dev/ref/templates/builtins/#random)在视图代码或模板中生成随机链接。以下代码是第一选择:

def start(request):
    survey_urls = ['/surveyone/', '/surveytwo/', '/surveythree/']
    survey_url = random.choice(surveys)
    return render(request, 'start.html', {'survey_url': survey_url})

然后在您的模板中执行标准

<a class="btn btn-success" href="{{survey_url}}">START</a>

您还可以考虑在urls.py中使用reverse函数(https://docs.djangoproject.com/en/dev/ref/urlresolvers/#django.core.urlresolvers.reverse)提供您的网址名称参数,以便survey_urls列表不会被硬编码。