Django为对象定义get_create_url(),get_update_url()和get_delete_url()是否有意义

时间:2014-03-07 02:22:44

标签: django django-templates django-urls

每个具有唯一url的对象都应该有get_absolute_url(),它通常返回对象的详细视图。通常这些对象也有创建,更新和删除视图,并且URL需要一些参数才能工作。您可以在模板中为这些网址提供参数,但如果您更改了网址结构等,则还必须更改所有模板,而不是更改该功能。那么: 定义创建,编辑和删除网址的方法是不错的做法,还是这个方法存在一些问题?

考虑一个示例,我有一个博客,博客所有者可以添加帖子,编辑和删除它们。 Post有博客的外键。帖子的详细信息模板可以包含以下链接:

<a href="{% url 'post-edit' blog=post.blog.pk pk=post.pk %}">edit post</a>
<a href="{% url 'post-delete' blog=post.blog.pk pk=post.pk %}">delete post</a>
<a href="{{ post.blog.get_absolute_url }}">back to blog</a>

和网址:

url(r'^blog-(?P<blog>\d+)/post-(?P<pk>[-\w]+)/$', views.PostView.as_view(),  name='post-view'),
url(r'^post-new/blog-(?P<blog>\d+)/$', views.CreatePostView.as_view(), name='post-new'),
url(r'^post-edit/blog-(?P<blog>\d+)/post-(?P<pk>\d+)/$', views.UpdatePostView.as_view(), name='post-edit',),
url(r'^post-delete/blog-(?P<blog>\d+)/post-(?P<pk>\d+)/$', views.DeletePostView.as_view(), name='post-delete',),

不是最好的例子,但我希望你明白我的观点。

1 个答案:

答案 0 :(得分:2)

至少你完全取决于你如何设计你的内部命名。

对我来说,作为一个长期的djangoist,我使用的是同样的,从来没有问题。我的团队也喜欢这种“发展模式”。

我们将应用urls.py包含在根urls.py中,并将您的网址命名为几乎相同...除非我们将应用名称添加到网址中(如果需要)名字也是。在您的示例中,这将是blog-post-newblog-post-delete

例如

urlpatterns = patterns('service.views',
    # /services/1/edit/
    url(r'^(?P<service_pk>\d+)/edit/$',
        view = 'edit',
        name = 'service-edit',
    ),
    # /services/add/
    url(r'^add/$',
        view = 'add',
        name = 'service-add',
    ),
    # /services/1/delete/
    url(r'^(?P<service_pk>\d+)/delete/$',
        view = 'delete',
        name = 'service-delete',
    ),
    # /services/1/permissions/
    url(r'^(?P<service_pk>\d+)/permissions/$',
        view = 'permissions',
        name = 'service-permissions',
    ),
)

所以,做你认为合适的事情 - 没有“错误”,请记住,可能会有另一个应用程序进入你的项目“post”;)