从另一个应用程序中调用Django模板URL

10
我肯定漏了什么傻乎乎的东西。我在一个模板中有一个{% url %},其中操作来自另一个应用程序。它没有起作用,但我不知道使用其他应用程序的视图函数是否有什么不同,或者我只是做了一些傻事。
call/template/call/file.html
    <form action="{% url 'upload_image' %}"></form>

图片/urls.py

from .views import PictureList, PictureCreate, PictureDetail, PictureUpdate, PictureDelete, upload_image

...
url(r'^upload_image/$', upload_image, name='upload_image'),
...

图片/view.py

def upload_image( request ):
    print 'IN IMAGE UPLOAD'
    print request

我所获得的只有:

NoReverseMatch at /call/4/

Reverse for 'upload_image' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

文件故意命名为 url.py 还是打错了? - alecxe
这是一个打字错误...现在已经修复了。 - brechmos
2
如果您使用命名空间版本 {% url 'picture:upload_image' %} 会怎样呢? - alecxe
我尝试了 action="{% url 'picture:upload_image' %}"url(r'^upload_image/$', upload_image, namespace='picture', name='upload_image'), 但是提示 picture 不是已注册的命名空间。(我以前没有使用过命名空间。) - brechmos
哦,还是将命名空间放在项目的urls.py列表中(而不是picture/urls.py)? - brechmos
啊,明白了。命名空间默认为应用程序名称。这样可以工作。非常感谢! - brechmos
1个回答

18

当在不同的应用程序中调用 reverse() 函数时,你应该使用其“命名空间”版本,如下所示:

{% url 'app_name:app_url' %}

在您具体的情况下,这意味着:

{% url 'picture:upload_image' %}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接