标签: django-urls

Django url 的优先级

我一直在使用 django Rest 框架开发的电子商务平台。url 的数量日益增加,并且有许多设计结构相似的 API 端点 (url)。

例如:

/api/user/<str:user_uniq_id>/

/api/user/sigin/

/api/user/registration/

/api/user/invitation/edit/

/api/user/invitation/<str:uniq_id>/

有时,当我点击任何网址时,另一个网址就会被触发。假设我击中了/api/user/<str:user_uniq_id>/api/user/signin/被叫了。

我该如何解决这个问题?

django url 有排序优先级吗?

django django-urls django-rest-framework

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

在 Django Rest Framework 中使用 APIView 和 viewset 设置路由器

这是我在 Stackoverflow 上的第一个问题!

我是 Django 新手,正在学习一些教程。

我试图了解是否有一种方法可以从不同的视图类(如 APIView 和viewsets.ModelViewSet)设置 API 的路由(如果我不使用好的措辞,请告诉我)

在我的观点中:

from rest_framework import viewsets
from post.models import UniquePost
from .serializers import UniquePostSerializers
from rest_framework.views import APIView

class UniquePostViewSet(viewsets.ModelViewSet):
    serializer_class = UniquePostSerializers
    queryset = UniquePost.objects.all()

class FileUploadView(APIView):
     some code here but no queryset nor serialized data...and no model
Run Code Online (Sandbox Code Playgroud)

在网址中我有:

from post.api.views import UniquePostViewSet
from django.urls import path, include
from rest_framework.routers import DefaultRouter

from post.api.views import FileUploadView

router = DefaultRouter()
router.register('UniquePost', UniquePostViewSet, base_name='uniquepostitem')
router.register('demo', FileUploadView, base_name='file-upload-demo')
urlpatterns = router.urls
Run Code Online (Sandbox Code Playgroud)

但似乎我可以通过这种方式注册FileUploadView。因为我没有要渲染的查询集。 …

django django-urls django-views django-rest-framework

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

&lt;int:pk&gt; 和 &lt;pk&gt; 之间有什么区别?

假设我们正在使用 django 实现一个简单的博客,并且可以通过 等 URL 访问博客文章/posts/1//posts/2/

当我们在 urlpatterns 数组中定义路径变量时,使用
path('post/<int:pk>/', ..., ...)和 之间的主要区别是什么path('post/<pk>/', ..., ...)

这只是好的做法吗?有实际好处吗?

python django django-urls

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

Django url 路径迁移 (1.11-&gt;3.1) 路由符号警告

从 Django 1.11 迁移时,我在 Django 3.1.5 中收到此警告

?: (2_0.W001) Your URL pattern 'employee/attendanceactivity/attendance/(?P<attendance_id>\d+)/' [name='employee-attendanceactivity-detail'] has a route that contains '(?P<', begins with a '^', or ends with a '$'. This was likely an oversight when migrating to django.urls.path().
Run Code Online (Sandbox Code Playgroud)

这是 url.py 的声明

path('employee/attendanceactivity/attendance/(?P<attendance_id>\d+)/', 
    views.employee_attendanceactivity_detail, name = 'employee-attendanceactivity-detail'), 
Run Code Online (Sandbox Code Playgroud)

我应该如何解决这个警告?谢谢

django-urls django-3

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

在基于类的视图中获取 url kwargs

我需要在基于类的视图中检索 url 中写入的 pk 值:

path('<int:pk>/data/', views.DataView.as_view(), name='data'),
Run Code Online (Sandbox Code Playgroud)

get然而,我到处看到的是在or等​​方法的定义中检索到的 pk post

我想要的是能够使用它来定义我的类变量,因为我需要在类中的每个方法中从这个 pk 中获取相同的值,如下所示:

class DataView(ContextMixin, UpdateView):
    pk = get_pk_from_url
    ...
    value = ...

    def get(self, request, *args, **kwargs):
        value = self.value
        # Do something with value

    def post(self, request, *args, **kwargs):
        value = self.value
        # Do something with value
Run Code Online (Sandbox Code Playgroud)

我在写这个问题时得到了一个想法,那就是定义一个可以完成我需要的方法,然后在我的其他方法中调用这个方法。

class DataView(ContextMixin, UpdateView):

    def get_value(self):
        self.pk = self.kwargs['script_id']
        ...
        self.value = ...

    def get(self, request, *args, **kwargs):  
        self.get_value()
        value = self.value
        # Do something with value

    def …
Run Code Online (Sandbox Code Playgroud)

python django django-urls django-views django-class-based-views

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

在Django通用视图中指定不同的模板名称

我的urls.py中的代码用于我的通用视图;

infodict = {
'queryset': Post.objects.all(),
'date_field': 'date',
'template_name': 'index.html',
'template_object_name': 'latest_post_list',
}

urlpatterns += patterns('django.views.generic.date_based',
(r'^gindex/$', 'archive_index', infodict),
)
Run Code Online (Sandbox Code Playgroud)

因此,转到地址/ gindex /将使用带有'index.html'模板的通用视图.

但由于我在这个urlpattern中会有更多通用视图,我应该如何使用相同的infodict提供不同的模板名称?我不想使用大量的infodicts,我不能使用默认的模板名称.

请注意,这也适用于infodict中的模板对象名称.

谢谢你的帮助!

编辑:这是我关于stackoverflow的第一个问题之一,我对这些彻底的答案感到惊讶!我更喜欢使用我不知道的dict构造函数.我发现使用python文档有点困难,因为我找不到我正在寻找的东西!

再次感谢所有的答案和不同的方法.

python django django-urls

2
推荐指数
1
解决办法
2457
查看次数

通过URL传递对象数据

我知道我可以通过URL模式传递对象值,并在视图函数中使用它们.例如:

(r'^edit/(?P<id>\w+)/', edit_entry),
Run Code Online (Sandbox Code Playgroud)

可以像:

def edit_entry(request, id):
        if request.method == 'POST':
                a=Entry.objects.get(pk=id)
                form = EntryForm(request.POST, instance=a)
                if form.is_valid():
                        form.save()
                        return HttpResponseRedirect('/contact/display/%s/' % id)
        else:
                a=Entry.objects.get(pk=id)
                form = EntryForm(instance=a)
        return render_to_response('edit_contact.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)

但是如何从URL中的模型字段("id"除外)传递值?例如,我有一个抽象的基本模型,其字段为"job_number",由子模型"OrderForm"和"SpecReport"共享.我想点击订单上的"job_number",并为同一个工作号码调用规格报告.我可以创建一个

href="/../specifications/{{ record.job_number }}
Run Code Online (Sandbox Code Playgroud)

将信息传递给url,但我已经知道这个正则表达式语法不正确:

(r'^specifications/(?P<**job_number**>\w+)/', display_specs),
Run Code Online (Sandbox Code Playgroud)

我也不能像在id中那样捕获视图中的job_number:

def display_specs(request, job_number):
    records = SpecReport.objects.filter(pk=job_number)
    tpl = 'display.html'
    return render_to_response(tpl, {'records': records })
Run Code Online (Sandbox Code Playgroud)

有一个简单的方法,还是比我认为的更复杂?

修改后的代码如下:

(r'^specdisplay/?agencyID=12/', display_specs),
Run Code Online (Sandbox Code Playgroud)

和:

def display_specs(request, agencyID):
    agencyID= request.GET.get('agencyID')
    records = ProductionSpecs.objects.filter(pk=id)
    tpl = 'display_specs.html'
    return render_to_response(tpl, {'records': records })
Run Code Online (Sandbox Code Playgroud)

不知道如何过滤.pk不再适用.

django django-urls

2
推荐指数
1
解决办法
7488
查看次数

如何在Django URL中处理&符号?

我有一个Django站点,它使用项目名称来创建查看器友好的URL.例如:

/item/DeluxeWidget/
Run Code Online (Sandbox Code Playgroud)

我有一个项目名称中有&符号:

/item/Red & Blue Widget/
Run Code Online (Sandbox Code Playgroud)

&符号抛出了一些东西.如果我使用{{widget.name | fix_ampersands}},&符号将被转义,&amp;但仍未在网址格式中获取:

url(r"^widget/(?P<name>[0-9a-zA-Z&,. -]+)/$", 'site.views.widget' ),
Run Code Online (Sandbox Code Playgroud)

在视图中我使用捕获的名称来做

Widget.objects.get(name=name)
Run Code Online (Sandbox Code Playgroud)

在URL中处理&符号的转义,模式或过滤器的正确组合是什么?我也期望在其中遇到带撇号的名字.有什么办法可以处理吗?

python django url django-urls

2
推荐指数
1
解决办法
1246
查看次数

我可以使用两个名称不同的urls.py吗?

在Django中,是否有可能有两个不同的url模式文件,这两个文件都没有被调用urls.py?或者Django是否依赖于每个Django app只有一组url模式,并且必须调用它urls.py

我正在使用Django CMS,我希望将应用程序拆分为两个apphooks和两个菜单.所以,我已经试过分裂urls.pypub_urls.pytrain_urls.py,但我似乎通过这样做,有破事,尽管cms_app.py命名正确的URL -例如:

from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool
from django.utils.translation import ugettext_lazy as _
from resources.menu import TrainingMenu, PublicationMenu

class PublicationApp(CMSApp):
    name = _("Publication App") # give your app a name, this is required
    urls = ["resources.pub_urls"] # link your app to url configuration(s)
    menus = [PublicationMenu]

class TrainingApp(CMSApp):
    name = _("Training App") # give your app a name, this is required
    urls …
Run Code Online (Sandbox Code Playgroud)

django django-urls django-cms

2
推荐指数
1
解决办法
3664
查看次数

如何在Django中将可选参数传递给url

我有一个带有一个可选参数的网址格式:

# urls.py :
url(r'^(page/(?P<page>\w+))?$', MyIndexView.as_view(), name='index'),
Run Code Online (Sandbox Code Playgroud)

分页和其他所有方法都可以正常工作,直到我在模板中创建指向特定页面的网址为止:

# templates/mysite.html
{% url 'index' 54 %}
Run Code Online (Sandbox Code Playgroud)

然后我得到一个错误:

Reverse for 'index' with arguments '(54,)' and keyword arguments '{}' not found. 1 pattern(s) tried: [u'(page/(?P<page>\\w+))?$']
Run Code Online (Sandbox Code Playgroud)

没有该参数,它将起作用:

{% url 'index' %}
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

{% url 'index' page=54 %}
Run Code Online (Sandbox Code Playgroud)

并得到类似的错误。

django django-urls

2
推荐指数
1
解决办法
5019
查看次数