如何将第 3 方应用程序的 url 集成到我的 url 结构中?
How to integrate 3rd party app's urls into my url structure?
我想使用第 3 方应用程序,例如 imagestore
。
默认 imagestore url config
的工作方式类似于 site.com/gallery/(album, image, tag)
。我想将 url 更改为 site.com/username/(album, image, tag)
(即删除 gallery
),但不知道该怎么做,因为有 namespace='imagestore'
,imagestore
在内部使用。
# core urls
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='base.html'), name="home"),
url(r'^gallery/', include('imagestore.urls', namespace='imagestore')),
url(r'^(?P<user_url>[\w.-]+)/', include('profiles.urls', namespace='profiles_username')),
]
# profiles.urls
from . import views
urlpatterns = [
url(r'^$', views.profiles_home, name='profiles_home'),
]
# piece of imagestore urls
urlpatterns = [
url(r'^$', AlbumListView.as_view(), name='index'),
url(r'^album/add/$', CreateAlbum.as_view(), name='create-album'),
url(r'^album/(?P<album_id>\d+)/$', ImageListView.as_view(), name='album'),
url(r'^album/(?P<pk>\d+)/edit/$', UpdateAlbum.as_view(), name='update-album'),
url(r'^album/(?P<pk>\d+)/delete/$', DeleteAlbum.as_view(), name='delete-album'),
url(r'^tag/(?P<tag>[^/]+)/$', ImageListView.as_view(), name='tag'),
url(r'^user/(?P<username>\w+)/albums/', AlbumListView.as_view(), name='user'),
url(r'^user/(?P<username>\w+)/$', ImageListView.as_view(), name='user-images'),
url(r'^upload/$', CreateImage.as_view(), name='upload'),
]
据我了解,我需要以某种方式删除 url(r'^gallery/', include('imagestore.urls', namespace='imagestore')),
,添加到 profiles.urls
中,例如 include('imagestore.urls')
,但同时以某种方式保留 namespace='imagestore'
。
我试过这个:
urlpatterns = [
url(r'^$', views.profiles_home, name='profiles_home'),
url(r'', include('imagestore.urls', namespace='imagestore')),
]
但是
Exception Type: NoReverseMatch
Exception Value: 'imagestore' is not a registered namespace
编辑:
当我尝试了下面的 2 个解决方案但它们没有用时,我的猜测是问题是由于
中的参数 <user_url>
url(r'^(?P<user_url>[\w.-]+)/', include('imagestore.urls', namespace='imagestore')),
imagestore
无法处理,因为任何其他名称,例如 r'^lalala/
都可以。无论如何如何 hide
这个参数为 imagestore
?
如果将 imagestore.urls
与命名空间 imagestore
包含在 profiles.urls
与命名空间 profiles
中,则会创建一个嵌套的命名空间 profiles:imagestore
.
尝试在您的核心 urlpatterns 中包含 imagestore.urls
,使用与 profiles.urls
.
相同的基础 URL
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='base.html'), name="home"),
url(r'^(?P<user_url>[\w.-]+)/', include('imagestore.urls', namespace='imagestore')),
url(r'^(?P<user_url>[\w.-]+)/', include('profiles.urls', namespace='profiles_username')),
]
您想用 /<someusername>/
替换 /gallery/
吗?如果是这样,试试这个:
#core urls
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='base.html'), name="home"),
url(r'^(?P<user_url>[\w.-]+)/', include('profiles.urls', namespace='profiles_username')),
url(r'^(?P<user_url>[\w.-]+)/', include('imagestore.urls', namespace='imagestore')),
]
像以前一样保留您的 profiles.urls
。这样,当请求 url 时,Django 将首先检查 profiles.urls
,如果路径只是用户名,则会匹配并尝试为您获取该用户的页面。否则 Django 将检查下一个选项以查看是否存在匹配项,并且它将加载 imagestore.urls
解决方法是:
# core urls
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='base.html'), name="home"),
url(r'^(?P<user_url>[\w.-]+)/', include('profiles.urls', namespace='profiles_username')),
url(r'^[\w.-]+/', include('imagestore.urls', namespace='imagestore')),
]
即r'^(?P<user_url>[\w.-]+)/',
更改为 r'^[\w.-]+/',
。 <user_url>
向 imagestore
发送了一个无法处理的变量。
我想使用第 3 方应用程序,例如 imagestore
。
默认 imagestore url config
的工作方式类似于 site.com/gallery/(album, image, tag)
。我想将 url 更改为 site.com/username/(album, image, tag)
(即删除 gallery
),但不知道该怎么做,因为有 namespace='imagestore'
,imagestore
在内部使用。
# core urls
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='base.html'), name="home"),
url(r'^gallery/', include('imagestore.urls', namespace='imagestore')),
url(r'^(?P<user_url>[\w.-]+)/', include('profiles.urls', namespace='profiles_username')),
]
# profiles.urls
from . import views
urlpatterns = [
url(r'^$', views.profiles_home, name='profiles_home'),
]
# piece of imagestore urls
urlpatterns = [
url(r'^$', AlbumListView.as_view(), name='index'),
url(r'^album/add/$', CreateAlbum.as_view(), name='create-album'),
url(r'^album/(?P<album_id>\d+)/$', ImageListView.as_view(), name='album'),
url(r'^album/(?P<pk>\d+)/edit/$', UpdateAlbum.as_view(), name='update-album'),
url(r'^album/(?P<pk>\d+)/delete/$', DeleteAlbum.as_view(), name='delete-album'),
url(r'^tag/(?P<tag>[^/]+)/$', ImageListView.as_view(), name='tag'),
url(r'^user/(?P<username>\w+)/albums/', AlbumListView.as_view(), name='user'),
url(r'^user/(?P<username>\w+)/$', ImageListView.as_view(), name='user-images'),
url(r'^upload/$', CreateImage.as_view(), name='upload'),
]
据我了解,我需要以某种方式删除 url(r'^gallery/', include('imagestore.urls', namespace='imagestore')),
,添加到 profiles.urls
中,例如 include('imagestore.urls')
,但同时以某种方式保留 namespace='imagestore'
。
我试过这个:
urlpatterns = [
url(r'^$', views.profiles_home, name='profiles_home'),
url(r'', include('imagestore.urls', namespace='imagestore')),
]
但是
Exception Type: NoReverseMatch
Exception Value: 'imagestore' is not a registered namespace
编辑: 当我尝试了下面的 2 个解决方案但它们没有用时,我的猜测是问题是由于
中的参数<user_url>
url(r'^(?P<user_url>[\w.-]+)/', include('imagestore.urls', namespace='imagestore')),
imagestore
无法处理,因为任何其他名称,例如 r'^lalala/
都可以。无论如何如何 hide
这个参数为 imagestore
?
如果将 imagestore.urls
与命名空间 imagestore
包含在 profiles.urls
与命名空间 profiles
中,则会创建一个嵌套的命名空间 profiles:imagestore
.
尝试在您的核心 urlpatterns 中包含 imagestore.urls
,使用与 profiles.urls
.
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='base.html'), name="home"),
url(r'^(?P<user_url>[\w.-]+)/', include('imagestore.urls', namespace='imagestore')),
url(r'^(?P<user_url>[\w.-]+)/', include('profiles.urls', namespace='profiles_username')),
]
您想用 /<someusername>/
替换 /gallery/
吗?如果是这样,试试这个:
#core urls
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='base.html'), name="home"),
url(r'^(?P<user_url>[\w.-]+)/', include('profiles.urls', namespace='profiles_username')),
url(r'^(?P<user_url>[\w.-]+)/', include('imagestore.urls', namespace='imagestore')),
]
像以前一样保留您的 profiles.urls
。这样,当请求 url 时,Django 将首先检查 profiles.urls
,如果路径只是用户名,则会匹配并尝试为您获取该用户的页面。否则 Django 将检查下一个选项以查看是否存在匹配项,并且它将加载 imagestore.urls
解决方法是:
# core urls
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='base.html'), name="home"),
url(r'^(?P<user_url>[\w.-]+)/', include('profiles.urls', namespace='profiles_username')),
url(r'^[\w.-]+/', include('imagestore.urls', namespace='imagestore')),
]
即r'^(?P<user_url>[\w.-]+)/',
更改为 r'^[\w.-]+/',
。 <user_url>
向 imagestore
发送了一个无法处理的变量。