标签: django-urls

Django url templatetag(但不是rev​​erse())错误:渲染时捕获NoReverseMatch

我正在尝试使用url模板标记:

{% url all-labs-map %}
Run Code Online (Sandbox Code Playgroud)

但是当我查看页面时,我收到此错误:

Caught NoReverseMatch while rendering: Reverse for 'all-labs-map' with arguments '()' and keyword arguments '{}' not found.
Run Code Online (Sandbox Code Playgroud)

当我像这样使用模板标签时:

{% url gmaps.views.all_labs %}
Run Code Online (Sandbox Code Playgroud)

它工作得很好.

这是URL conf:

urlpatterns = patterns('gmaps.views',
    url(r'^lab_list/$', 'all_labs', name="all-labs-map" ),
)
Run Code Online (Sandbox Code Playgroud)

我尝试使用django shell来查看命名URL是否存在问题,但是使用了

reverse('all-labs-map') 
Run Code Online (Sandbox Code Playgroud)

返回正确的URL.

关于发生了什么的任何想法?

谢谢!

迈季

编辑:

我在ubuntu上使用django 1.2与nginx服务器和gunicorn和virtualenv.我在使用库加载的自定义标记时遇到了另一个问题,但即使我使用了正确的标记注册语法,也无法识别标记本身.任何想法将非常感谢!

django django-urls

9
推荐指数
1
解决办法
1483
查看次数

如何在多部署可重用的Django应用程序中获取current_app以使用reverse?

我正在编写可重用的应用程序.我想多次部署它.

这是urls.py:

urlpatterns = patterns('',
(r'^carphotos/', include('webui.photos.urls', app_name='car-photos') ),
(r'^userphotos/', include('webui.photos.urls',  app_name='profile-photos') ),)
Run Code Online (Sandbox Code Playgroud)

和照片/ urls.py:

urlpatterns = patterns('webui.photos.views',
url(r'^$', album_list, name="album-list" )
url(r'^newalbum/$', album_page, {'create': True}, name="album-create"),)
Run Code Online (Sandbox Code Playgroud)

在album_list视图中,我想显示用于创建新相册album_page的网址.

我发现我必须使用反向函数的参数current_app来获取正确的URL.

但是如何获得这个current_app?我认为答案很简单.但我在django文档中找不到它.

谢谢,尼克

python django django-urls

8
推荐指数
2
解决办法
5895
查看次数

Django:站点范围的URL前缀

我已经构建了一个Django站点,它将在它生存时存在于根目录中.现在它在IP地址上运行良好.出于测试目的,客户端已指向其中的代理URL,但URL中包含/ folder/path,因此没有任何URL模式匹配.我把(/ folder/path)?所有的url模式,所以他们现在响应,但所有链接都被破坏,因为我使用{%url%}标记,而url模式将匹配可选路径,他们不包括在该标记中.

显然,我可以硬编码/文件夹/路径到我的所有网址(好吧,进入所有网址包括),直到测试完成,但是有更好的方法吗?

django django-urls

8
推荐指数
1
解决办法
4062
查看次数

在Django中,您可以自动将URL映射到查看方法吗?

鉴于这样的观点:

# my_app/views.py
def index(request):
    ...
def list(request):
    ...
def about(request):
    ...
Run Code Online (Sandbox Code Playgroud)

而不是urls.py在视图中为每个方法明确声明url :

# urls.py
url(r'^index$', 'my_app.views.index'),
url(r'^list$', 'my_app.views.list'),
url(r'^about$', 'my_app.views.about'),
...
Run Code Online (Sandbox Code Playgroud)

是否可以只为URL调度程序提供view(my_apps.views)并让它处理所有视图的方法?

django django-urls

8
推荐指数
1
解决办法
1114
查看次数

如何通过URL传递带空格的变量:Django

我通过url传递带有空格的变量时遇到了麻烦.现在假设我有一个对象

class Kiosks(models.Model):
    name = models.CharField(max_length = 200, unique = True)
    owner = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)

现在为信息亭输入的"名称"是"Akash Deshpande"并保存.现在,当重定向到视图中的新页面时,我正在使用"kiosk名称"即

 messages.success(request,"Kiosk edited successfully") 
 return HttpResponseRedirect('/kiosks/'+kiosk.name+'/')
Run Code Online (Sandbox Code Playgroud)

迎合这个网址的观点如下:

def dashboard(request, kiosk_name):
    kiosk =Kiosks.objects.get(name__iexact = kiosk_name)
    deal_form = DealsForm(kiosk=kiosk)
    code_form = CodeForm()
    unverified_transactions = get_unverified_transactions(kiosk)
    return render(request,'kiosks/dashboard.html',{'kiosk':kiosk, 
                                                   'deal_form' : deal_form,
                                                   'code_form' : code_form,
                                                   'unverified_transactions' : unverified_transactions})
Run Code Online (Sandbox Code Playgroud)

主要的urls.py只是通过"信息亭"指示所有内容,以显示urls kiosks urls.py

urlpatterns = patterns('kiosks.views',url(r'^(\w+)/$', 'dashboard'),)
Run Code Online (Sandbox Code Playgroud)

现在,它没有转到此页面,而是发出错误"找不到页面".如何传递其中有空格的变量?问题清楚了吗?任何帮助将受到高度赞赏.

python django django-urls

8
推荐指数
1
解决办法
1万
查看次数

django中的urls.py正则表达式评估顺序是什么?

我在urls.py中使用正则表达式时遇到了一些问题(我是django的初学者以及一般的正则表达式)

这是我原来的urls.py

url(r'^name/(?P<name>\w+)/$', 'course.views.name'),
url(r'^', 'course.views.index'),
Run Code Online (Sandbox Code Playgroud)

我试图使用这个来访问它:

http://127.0.0.1:8000/name/blah/
Run Code Online (Sandbox Code Playgroud)

我的观点如下:

def index(request):
    return HttpResponse("Hello, sam. You're at the course index.")

def name(request, name):
    return HttpResponse("Hello, %s. You're at the course index." % name)
Run Code Online (Sandbox Code Playgroud)

我得到的结果是,无论我给出什么输入,我都会定期获得"索引"功能,而不是"名称"功能.我认为问题出在第一个正则表达式上.

但后来,我把第二个改为:

url(r'^$', 'course.views.index'),
Run Code Online (Sandbox Code Playgroud)

而这正是我认为它工作的方式!

我知道"$"表示行尾,但是第一个正则表达式是不是已经被评估过了?这些表达式匹配的顺序是什么?

在每个网址上添加"$"并不是什么大不了的事,但我想理解为什么要把它放在那里.

我正在使用Django1.4和Python 2.7

python regex django-urls

8
推荐指数
1
解决办法
2720
查看次数

找不到Django 404错误页面

我的项目名为homefood,当我运行server时,我得到了这个错误.任何人都有任何线索如何解决这个错误.

Page not found (404)

Request Method: GET

Request URL:    http://127.0.0.1:8000/

Using the URLconf defined in homefood.urls, Django tried these URL patterns, in this order:

^foodPosts/

^admin/

The current URL, , didn't match any of these.

You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.
Run Code Online (Sandbox Code Playgroud)

我的settings.py文件看起来像这样......

import dj_database_url
"""
Django settings for homefood project.

# Build paths inside the project like this: …
Run Code Online (Sandbox Code Playgroud)

python django django-urls http-status-code-404

8
推荐指数
1
解决办法
5万
查看次数

Django Rest Framework反向和SimpleRouter

如何使用DRF reverse来调用复杂的URL SimpleRouter

我的网址位于两个地方,一个用于团队,另一个用于游戏,如下所示:

league.urls:

url(r'^team/', include('teams.urls')),
Run Code Online (Sandbox Code Playgroud)

team.urls:

router = SimpleRouter()
router.register(r'game', GameViewSet, 'games')
Run Code Online (Sandbox Code Playgroud)

我正在尝试reverse更新游戏的网址.基于DRF SimpleRouter,这应该是"/ team/{pk}/game/{pk}"

我的测试是:

url = reverse('games-detail', args=[team.pk, game.pk])
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

    raise error, v # invalid expression
error: redefinition of group name u'pk' as group 2; was group 1
Run Code Online (Sandbox Code Playgroud)

django django-urls django-rest-framework

8
推荐指数
1
解决办法
8841
查看次数

Django - 获取反转url所需的参数名称

背景

假设我有一个带有参数的url模式,它会将我链接到django中的视图:

url(
    r'^things/(?P<thing_name>\w+)/features/(?P<feature_name>\w+)$',
    views.thingFeature,
    name='thing_feature'
),
Run Code Online (Sandbox Code Playgroud)

让我们说我有一个thing和一个feature:

thing = Thing.objects.get(.....)
feature = thing.feature_set.first()

t_name = thing.name
f_name = feature.name
Run Code Online (Sandbox Code Playgroud)

现在Django给了我很棒的能力来获取一个网址,它将我带到一个专门针对特定事物的特定功能的页面.我可以这样做:

from django.core.urlresolvers import reverse
url = reverse('thing_feature', thing_name=t_name, feature_name=f_name)
# url == '/things/thing2/features/left-arm'
Run Code Online (Sandbox Code Playgroud)

现在我偶然发现了一个我需要专门解决的问题.我不是在寻找解决方法 - 我正在寻找解决以下问题:

给定一个url name,如何获取kwarg反转该url所需的参数名称列表?

我正在寻找这个功能get_kwarg_names_for_url.它的行为如下:

url_kwarg_names = get_kwarg_names_for_url('thing_feature')
# url_kwarg_names == ['thing_name', 'feature_name']
Run Code Online (Sandbox Code Playgroud)

url_kwarg_names现在是我需要提供给Django reverse函数的每个关键字的列表,以便反转命名的url "thing_feature".

任何帮助表示赞赏!

根据knbk的回答,我能够提出以下解决方案:

def get_kwarg_names_for_url(url_name):
    resolver = get_resolver(get_urlconf())
    reverse_data = resolver.reverse_dict[url_name]

    pattern_list = reverse_data[0]

    '''
    Need …
Run Code Online (Sandbox Code Playgroud)

python django django-urls

8
推荐指数
1
解决办法
1011
查看次数

如何修复“str”对象不是映射错误

我会开始说这不是一个重复的问题。我的问题与 Django 2.2 的 url 有点不同。

当将 HttpResponseRedirect 返回到同一应用程序中的另一个视图时,视图触发“str”对象不是映射错误。

我真的不知道出了什么问题。我在同一项目的其他应用程序中使用相同的方法并且它有效。

项目网址.py

urlpatterns = [
    url(r'^$', Home.as_view()),
    path('dashboard/', include('dashboard.urls')),
    path('main/', include('main.urls'))
]
Run Code Online (Sandbox Code Playgroud)

应用程序 url.py

urlpatterns = [
  path('', views.Section.as_view(), name='main-form')
]
Run Code Online (Sandbox Code Playgroud)

应用程序视图.py

class Home(View):
  def get(self, request):
    return render(request, 'index.html', context={})

  def post(self, request):
    return HttpResponseRedirect(reverse('main-form'))


class Section(View):

  def get(self, request):
    return HttpResponse("Test Ok")
Run Code Online (Sandbox Code Playgroud)

在发布主页表单后,它应该重定向到主表单视图(剖面视图类),但我收到错误。

如果我在模板 url 中使用 url,它会触发相同的错误{% url 'main-form' %}

如果我手动导航从地址栏查看,视图呈现良好。

怎么了?

django django-urls django-views

8
推荐指数
2
解决办法
2万
查看次数