我正在尝试使用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.我在使用库加载的自定义标记时遇到了另一个问题,但即使我使用了正确的标记注册语法,也无法识别标记本身.任何想法将非常感谢!
我正在编写可重用的应用程序.我想多次部署它.
这是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文档中找不到它.
谢谢,尼克
我已经构建了一个Django站点,它将在它生存时存在于根目录中.现在它在IP地址上运行良好.出于测试目的,客户端已指向其中的代理URL,但URL中包含/ folder/path,因此没有任何URL模式匹配.我把(/ folder/path)?所有的url模式,所以他们现在响应,但所有链接都被破坏,因为我使用{%url%}标记,而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)并让它处理所有视图的方法?
我通过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)
现在,它没有转到此页面,而是发出错误"找不到页面".如何传递其中有空格的变量?问题清楚了吗?任何帮助将受到高度赞赏.
我在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
我的项目名为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) 如何使用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) 假设我有一个带有参数的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) 我会开始说这不是一个重复的问题。我的问题与 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' %}
如果我手动导航从地址栏查看,视图呈现良好。
怎么了?