首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GET参数的Django解析-引发Resolver404()

问GET参数的Django解析-引发Resolver404()
EN

Stack Overflow用户
提问于 2015-07-15 12:11:08
回答 1查看 379关注 0票数 2

我需要测试重定向到url是否会导致404错误。django文档中的以下示例:https://docs.djangoproject.com/en/1.8/ref/urlresolvers/#resolve

我设法让下面的人开始工作了。因此,如果redirect_url引发404,我们将用户重定向到主页。

代码语言:javascript
复制
redirect_url = '/blog/hello-world'

view, args, kwargs = resolve()
kwargs['request'] = request
try:
    view(*args, **kwargs)
except Http404:
    self.message_user(...)
    return HttpResponseRedirect('/')

但是,我需要测试使用GET参数为?edit的?edit是否也会引发404。因为“编辑”标志用于返回不同的查询集。例如:

代码语言:javascript
复制
    if 'edit' in request.GET:
        qs = qs.drafts()
    else:
        qs = qs.public()

我修改了我的原始代码:

代码语言:javascript
复制
redirect_url = '%s?edit' % redirect_url
[...]

然而,这提高了Resolver404。

这里的完整堆栈跟踪:http://dpaste.com/1DQHH7Q

现在,我的问题是如何使用GET参数测试HTTP404错误?

当我在浏览器中访问url时,路径blog/2015/07/14/sky-limit-only-those-who-arent-afraid-fly/?edit是有效的。它如预期的那样工作。

一个肮脏的解决方案是这样做:

代码语言:javascript
复制
 from django.test.client import Client

 client = Client()
 resp = client.get(redirect_url)
 if not resp.status_code == 404:
    return HttpResponseRedirect(redirect_url)

我真的不想用这个。

EN

回答 1

Stack Overflow用户

发布于 2015-07-15 13:01:57

resolve()方法在不带GET参数的情况下接受url。您可以尝试替换request.GET。

代码语言:javascript
复制
redirect_url = '/blog/hello-world'
view, args, kwargs = resolve()
request.GET = {'edit': ''}
kwargs['request'] = request
try:
    view(*args, **kwargs)
except Http404:
    self.message_user(...)
    return HttpResponseRedirect('/')

请注意,request是当前视图的请求对象,因此如果需要实际的request.GET数据,请小心。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31430063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档