每个具有唯一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',),
不是最好的例子,但我希望你明白我的观点。
答案 0 :(得分:2)
至少你完全取决于你如何设计你的内部命名。
对我来说,作为一个长期的djangoist,我使用的是同样的,从来没有问题。我的团队也喜欢这种“发展模式”。
我们将应用urls.py
包含在根urls.py
中,并将您的网址命名为几乎相同...除非我们将应用名称添加到网址中(如果需要)名字也是。在您的示例中,这将是blog-post-new
或blog-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”;)