Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在django中为虚拟url模式使用名称_Django_Django Urls - Fatal编程技术网

在django中为虚拟url模式使用名称

在django中为虚拟url模式使用名称,django,django-urls,Django,Django Urls,我有一个名为“考试”的应用程序项目。现在我的索引页就是其中一个应用程序的索引页。所以url模式是这样的: from django.conf.urls import patterns, include, url urlpatterns = patterns('', url(r'^', include('exams.urls', namespace="exams")), ) from django.conf.urls import patterns, include, url urlp

我有一个名为“考试”的应用程序项目。现在我的索引页就是其中一个应用程序的索引页。所以url模式是这样的:

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    url(r'^', include('exams.urls', namespace="exams")),
)
from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    url(r'^exams/', include('exams.urls', namespace="exams")),
    url(r'^/$', 'mysite.views.index', name="index"),
)
但是,将来我可能希望为我的索引页创建一个新视图,并将url模式更改为如下内容:

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    url(r'^', include('exams.urls', namespace="exams")),
)
from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    url(r'^exams/', include('exams.urls', namespace="exams")),
    url(r'^/$', 'mysite.views.index', name="index"),
)
我想在模板中创建一些链接,以索引它是否加载考试应用程序或其他视图。因此,我尝试使用url方法的name参数(如上所述),但它似乎不起作用。在模板中使用
{%url'索引“%}
时,它返回以下错误:

Reverse for 'index' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
UPD:我忘了提到我试过使用以下代码:

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    url(r'^', include('exams.urls', namespace="exams"), name="index"),
)
我得到了上面写的错误

UPD2:要进一步澄清问题:
现在当我转到
http://mydomain/
我将查看我的应用程序索引。但也许将来我会改变我的索引页面,使用另一个视图来创建它。所以当我进入
http://mydomain/
我将通过该视图和转到
http://mydomain/exams
我将看到我的应用程序索引页面。在这种情况下,我的urls.py将类似于我在上面编写的第二个代码,在该代码中,我可以使用
{%url'索引“%}
标记轻松链接到索引页。但是现在我正在使用我在第一次更新中编写的代码。我希望我的模板将
{%url'索引'%}
呈现为指向我的索引页的链接(而不是使用
{%url'检查:索引'%}
因此,当我以后更改url.py代码时,我将不必更改所有模板。

如果我理解正确,现在您没有带有名称索引的url,在他的情况下,模板呈现时,它尝试查找名为index的url是正常的,如果找不到,它将失败。您可能需要的是创建urll并重定向到另一个视图,如下所述:

更新:

我仍然不能完全确定您想要什么(对此表示抱歉),但我怀疑您想要做的与此类似:

from django.conf.urls import patterns, include, url
from django.core.urlresolvers import reverse_lazy
from django.views.generic import RedirectView

urlpatterns = patterns('',
    url(r'^exams/', include('exams.urls', namespace="exams")),
    url(r'^/$', RedirectView.as_view(url=reverse_lazy('exams:index'), name="index"),
)

Raphael给出的解决方案与此类似,但用户不会被重定向(使用两个URL,用户将看到相同的内容)。也许这就是您要找的?

如果我理解得很好,您需要一个可以轻松更改的索引视图,同时不更改模板中指向它的链接。您可以将索引视图用作其他视图的包装,例如:

def a_view_that_will_show_all_the_exams(request):
    # this is the page displayed for now as default, but this could change
    # some logic here

def another_view_that_could_become_the_home_page(request):
    # some logic here

def index(request):
    return a_view_that_will_show_all_the_exams(request)
    # or another_view_that_could_become_the_home_page
    # or return exams.views.whatever_view

通过这种方式,您可以在保持链接静态的同时轻松更改索引视图的结果。

看看这个问题,它可能会有所帮助。您的mysite.views.index视图是否需要第二个参数,即
def index(request,other_arg):
…@Raphael:实际上我现在没有mysite.views.index,但我计划创建一个。但在创建之前,我希望我的索引成为我的应用程序索引页面。嗨,谢谢你的回答。我更新了我的帖子。我用name=“index”测试了url.py以前,但它也不起作用。但是你提供的链接很有魅力。非常感谢。再次问候。对不起,这是我的错。我认为它起作用了。实际上,使用你给我的链接,如果我使用另一个地址作为我的应用程序索引,我可以实现索引。因此,我将无法用作我的索引页。我将更新我的帖子以添加考试请澄清问题。谢谢你的回答。是的,我正在寻找拉斐尔推荐的东西。不过你的回答也很有帮助。非常感谢。嗨,非常感谢。