所以我正在使用Django构建一个Web服务,但是我在Urls中遇到了regexp的问题.
我想转到localhost/user/USERNAME/products /,其中用户名可以是任何字符,而不仅仅是\ w.我尝试使用它捕获它:
('^user/(?P<username>.+)/$', 'user'),
('^user/(?P<username>.+)/products/$', 'get_products'),
Run Code Online (Sandbox Code Playgroud)
但它会捕获用户名"USERNAME/products"并将其发送给用户.我应该怎么说除了零之外的任何长度的前斜线除外?
例如,在某些情况下,在 POST 或 GET 请求之后,我不仅想将用户重定向到特定页面,还想重定向到页面的特定部分。什么会更好:在 Django 中实现这个(重构重定向 url?)或在 javascript 中实现这个?
我有一个用Apache托管的django应用程序.我正忙着使用django restframework来创建API,但我遇到了URL问题.举个例子,我有一个这样的URL:
url(r'path/to/endpoint/(?P<db_id>.+)/$', views.PathDetail.as_view())
Run Code Online (Sandbox Code Playgroud)
如果我尝试访问此URL并且不包含尾部斜杠,则它将不匹配.如果我在最后添加一个问号,如下所示:
url(r'path/to/endpoint/(?P<db_id>.+)/?', views.PathDetail.as_view())
Run Code Online (Sandbox Code Playgroud)
这匹配使用和不使用尾部斜杠.唯一的问题是如果使用尾部斜杠,它现在会包含在我视图中的db_id变量中.因此,当它搜索数据库时,id不匹配.我不想通过字符串处理来查看我的所有视图并从我的url变量中删除尾部斜杠.
所以我的问题是,使用和不使用尾部斜杠进行url匹配的最佳方法是什么,而不包括发送到视图的参数中的尾部斜杠?
我正在关注本教程。目前我处于这一点,但是当我启动服务器python manage.py runserver 0.0.0.0:8000并在浏览器中打开 url 时,我收到以下错误:
name 'IndexView' is not defined
Run Code Online (Sandbox Code Playgroud)
这是我的 urls.py
from django.conf.urls import include, url
from django.contrib import admin
from django.conf.urls import patterns
from rest_framework_nested import routers
from authentication.views import AccountViewSet
router = routers.SimpleRouter()
router.register(r'accounts', AccountViewSet)
urlpatterns = patterns(
'',
url(r'^admin/', include(admin.site.urls)),
url(r'^api/v1/', include(router.urls)),
url('^.*$', IndexView.as_view(), name='index'),
)
Run Code Online (Sandbox Code Playgroud)
我不知道如何解决这个问题,因为我从未见过自己甚至在IndexView某处声明过。如果你们能给我一些关于这个的建议,那就太棒了。
编辑:
我的意见.py
from django.shortcuts import render
# Create your views here.
from rest_framework import permissions, viewsets
from authentication.models import Account …Run Code Online (Sandbox Code Playgroud) 是否可以在 url 中获取特定参数并在模板中使用它?
`{{ request.path }}
它获取整个 url,我只需要 'pk' 参数,即可链接到另一个页面。
谢谢。
在 Django 1.9(和 Python 3.4)中,默认的 APPEND_SLASH 工作正常,即我可以输入 'localhost:8000/ideatree/videos' 并添加尾部斜杠。
升级到 Django 1.11(和 Python 3.6)后,APPEND_SLASH 不再有效。
我一直在寻找弃用通知,但到目前为止没有发现任何适用的内容。(附带问题:您如何像在以前的版本中一样重新打开“大声弃用警告”?)
这是我的主要 urls.py:
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [ url(r'^(?i)ideatree/', include('ideatree.urls'),
name='home'),
]
Run Code Online (Sandbox Code Playgroud)
以及包含的 app_space 中的 urls.py:
from django.conf.urls import url
from . import views
app_name = 'ideatree'
urlpatterns = [
url(r'^$', views.index,name='index'),
url(r'^(?i)features/$', views.features, name='features'),
url(r'^(?i)videos/$', views.videos, name='videos')
]
Run Code Online (Sandbox Code Playgroud)
这两个 url.py 文件都没有改变,除了在 Django 1.9 中我有
from django.conf.urls import patterns, include, url
Run Code Online (Sandbox Code Playgroud)
在主 urls.py 中,但现在不推荐使用“模式”并发出警告。
和以前一样,我没有在 settings.py 中设置 APPEND_SLASH,依赖于其默认值 …
我收到以下错误:
使用关键字参数 '{'pk': ''}' 反转 'plan_edit'。尝试了 1 个模式:['palan/edit$']`。
有谁知道如何解决它?
网址.py
urlpatterns = [
url(r'^$', views.post_list, name='post_list'),
url(r'^palan/(?P<pk>[0-9]+)/$', views.palan_detail, name='palan_detail'),
url(r'^palan/new/$', views.plani_new, name='plani_new'),
url(r'^nn1/new/$', views.plani_new1, name='plani_new1'),
url(r'^palan/edit$', views.edit, name='plan_edit'),
]
Run Code Online (Sandbox Code Playgroud)
视图.py
def edit(request, pk):
post = get_object_or_404(Planning, pk=pk)
if request.method == "POST":
form = PostFormP(request.POST, instance=post)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.published_date = timezone.now()
post.save()
return redirect('palan_detail', pk=post.pk)
else:
return render(request, 'pages/plan_edit.html')
def palan_detail(request, pk):
palan = get_object_or_404(Planning, pk=pk)
j = Jour.objects.all().count()
return render(request, 'pages/palan_detail.html', {'palan': palan, 'j':j},) …Run Code Online (Sandbox Code Playgroud) 我试图在完成表单后将用户重定向到另一个页面而不保存。但是,当我使用 reverse 函数时,出现错误:'str' object has no attribute 'get'
在下面基于类的视图中, self.object.thing_id 打印它应该打印的数据。
基于类的视图:
class ThingUpdateView(LoginRequiredMixin, UpdateView):
def form_valid(self, form):
if self.object.status != 'initiated':
print(self.object.thing_id)
return reverse('thing:detail', kwargs={'thing_id': str(self.object.thing_id) })
return super().form_valid(form)
Run Code Online (Sandbox Code Playgroud)
即使 reverse('thing:list') 也会给出相同的错误
App Things 的 urls.py
url(r'^$', ThingListView.as_view(), name='list'),
url(r'^(?P<thing_id>[0-9A-Za-z]+)/$', ThingDetailView.as_view(), name='detail'),
url(r'^update/(?P<thing_id>[0-9A-Za-z]+)/$', ThingUpdateView.as_view(), name='update'),
Run Code Online (Sandbox Code Playgroud)
当用户点击 html 页面上的提交按钮时会发生此错误。它启动表单,然后路由到 form_valid 部分。self.objectstatus != 'initiated' 所以它试图做相反的返回。
这是堆栈跟踪:
Traceback:
File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\core\handlers\exception.py" in inner
41. response = get_response(request)
File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\utils\deprecation.py" in __call__
142. response = self.process_response(request, response)
File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\middleware\clickjacking.py" in process_response
32. if …Run Code Online (Sandbox Code Playgroud) 我想在我的 url 模式中传递两个参数,但我收到错误无反向匹配,即“项目”。虽然它只有一个参数可以正常工作。
这是主要的网址文件-
urlpatterns = [
path('admin/', admin.site.urls),
path(r'^materials/(?P<name>(\s+)/',include('materials.urls')),
path(r'^projects/',include('projects.urls')),
]
Run Code Online (Sandbox Code Playgroud)
项目.urls-
urlpatterns = [
path('',views.view_projects,name='view_projects'),
path('(?<projectid>\d+)/',views.project_steps,name='project_steps'),
path('(P<projectid>\d+)/(P<stepid>\d+)/',views.project_steps,
name='project_steps'),
]
Run Code Online (Sandbox Code Playgroud)
视图.py-
def view_projects(request):
projects = project.objects.all
return render(request,'projects/project_view.html',
{'projects':projects})
def project_steps(request,projectid,stepno=1):
projects = project.objects.all
stepss = steps.objects.all
return render(request,'projects/project_steps.html',
{'projectid':projectid,'steps':stepss,'projects':projects,
'stepno':stepno})
Run Code Online (Sandbox Code Playgroud)
模板-
"{% url 'projects' projectid=project.id stepno=step.step_no %}"
Run Code Online (Sandbox Code Playgroud) 我有一个 Django 网址:
path('question/<slug:question_slug>/add_vote/', views.AddVoteQuestionView.as_view())
Run Code Online (Sandbox Code Playgroud)
它适用于 english slug 但当 slug 是波斯语时,如下所示:
/question/????-???/add_vote/
django url throw 404 Not Found,有什么解决方案可以捕获这个 perisan slug url?
编辑:
我正在使用 Django 2.1.5。
使用此网址可以正常工作:
re_path(r'question/(?P<question_slug>[\w-]+)/add_vote/$', views.AddVoteQuestionView.as_view())
Run Code Online (Sandbox Code Playgroud) django-urls ×10
django ×9
python ×6
django-2.0 ×1
django-views ×1
python-3.x ×1
regex ×1
slug ×1