标签: django-urls

在Django中停止捕获基于/ for urls的任何字符串(正则表达式)

所以我正在使用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"并将其发送给用户.我应该怎么说除了零之外的任何长度的前斜线除外?

python regex django django-urls

3
推荐指数
1
解决办法
2320
查看次数

姜戈。如何使用片段标识符重定向到 url

例如,在某些情况下,在 POST 或 GET 请求之后,我不仅想将用户重定向到特定页面,还想重定向到页面的特定部分。什么会更好:在 Django 中实现这个(重构重定向 url?)或在 javascript 中实现这个?

django django-urls

3
推荐指数
1
解决办法
1632
查看次数

Django URL - 尾部斜杠被添加到变量值

我有一个用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 django django-urls

3
推荐指数
1
解决办法
1636
查看次数

django,未定义名称“IndexView”

我正在关注本教程。目前我处于一点,但是当我启动服务器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)

django django-urls

3
推荐指数
1
解决办法
4067
查看次数

如何从当前url获取参数

是否可以在 url 中获取特定参数并在模板中使用它?

`{{ request.path }}

它获取整个 url,我只需要 'pk' 参数,即可链接到另一个页面。

谢谢。

python django django-templates django-urls django-views

3
推荐指数
1
解决办法
2556
查看次数

升级到 Django 1.11 后 append_slash 不再有效

在 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,依赖于其默认值 …

python django django-urls django-settings

3
推荐指数
1
解决办法
2039
查看次数

使用关键字参数 '{'pk': ''}' 反转 'plan_edit'。尝试了 1 个模式:['palan/edit$']

我收到以下错误:

使用关键字参数 '{'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)

python django django-urls

3
推荐指数
1
解决办法
7661
查看次数

Django 'str' 对象没有属性 'get'

我试图在完成表单后将用户重定向到另一个页面而不保存。但是,当我使用 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)

django django-urls

3
推荐指数
1
解决办法
4689
查看次数

多参数 url 模式 django 2.0

我想在我的 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-urls python-3.x django-2.0

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

perisan 404 中的 Django slug url

我有一个 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)

python django django-urls slug

3
推荐指数
1
解决办法
430
查看次数