【问题标题】:Errors when passing a list through URL in Django在 Django 中通过 URL 传递列表时出错
【发布时间】:2021-02-26 19:39:14
【问题描述】:

我尝试通过 Django 中的 URL 传递列表。 我发现了这个:Passing a list through url in django 但我仍然得到错误。感觉自己在绕圈跑。

我的网址:

path('query/', include(('query.urls', 'query-space'), namespace='query-space')),

re_path(r'^2/(?P<amb_list>\w+)/$',views.ambitionGenPage, name='userambitiongen'),

我的看法:

def ambitionPage(request):
    if request.method == 'POST':
        form = AmbitionForm(request.POST)
        if form.is_valid():

            ambs_list = form.cleaned_data['ambition_field']
            redirect = HttpResponseRedirect(reverse('query-space:userambitiongen'))
            redirect['Location'] += '&'.join(['ambs={}'.format(x) for x in ambs_list])
            return redirect

    form = AmbitionForm()

    return render(request, 'query/ambition.html',{'form':form,})

def ambitionGenPage(request):
    ambitions = request.GET.getlist('amb_list')
    if ambitions:
        ambitions = [int(x) for x in ambitions]
        print(ambitions) #I first want to check what data I get

    return render(request, 'query/ambitionGen.html',{})

我修改了链接的代码。 在行中: redirect = HttpResponseRedirect(reverse('query-space:userambitiongen', args=(amb_list))) 他不知道这个论点:

NameError: name 'amb_list' is not defined

在示例中没有参数。当我尝试这个时,我得到了错误:

Reverse for 'userambitiongen' with no arguments not found. 1 pattern(s) tried: ['query/2/(?P&lt;amb_list&gt;\\w+)/$']

我在互联网上也没有找到这个表达式:redirect['Location'] 有人可以向我解释一下 ['Location'] 代表什么吗?

什么是正确的解决方案?我花了好几个小时试图自己找到它。

非常感谢您的宝贵时间!

【问题讨论】:

  • 不就是一个错字吗?你有一个变量ambs_list,它找不到变量amb_list,确实不存在。
  • 哦,这就是原因。谢谢!现在我收到错误,ambs_list 的示例列表不适合我的 URL 中的正则表达式:Reverse for 'userambitiongen' with arguments '('FR', 'FP')' not found. 1 pattern(s) tried: ['query/2/(?P&lt;amb_list&gt;\\w+)/$']我接管了链接提问者的 URL,因为没有其他 URL。可悲的是那没有用。你知道正则表达式应该是怎样的吗?我也不明白以“重定向”开头的两行中发生了什么。我将非常感谢您的解释。我希望我不要表现得太愚蠢
  • 在这种情况下,您必须更具体地了解您正在使用的 url 文件(不仅仅是它们的摘录,而不仅仅是其中一个),以便其他人检查可能是什么继续。

标签: python django


【解决方案1】:

return redirect['Location']
将您重定向到示例:yourwebpage.com/Location

您可以将列表暂时保存到 sql 数据库中,然后再将其删除。

【讨论】:

  • 啊谢谢你的解释!我得到了这个想法,首先将它保存在数据库中,但比我认为在 URL 中传输列表比将其加载到数据库中要快得多,只是在下一个视图中查询列表,我接下来需要它的地方。还是我是假的,两种解决方案之间的时间差异微不足道?
  • 取决于工作量,数据库是一种非常有效的存储和提取大量数据的方式。但如果它的东西很小,那么 URL 也应该没问题。
猜你喜欢
  • 2016-05-30
  • 2011-10-07
  • 1970-01-01
  • 2014-10-13
  • 2018-09-06
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 2020-08-30
相关资源
最近更新 更多