当我加载使用GroupDetailView中的上下文和group_detail.html中的模板的页面(下面的代码)时,出现此错误:
NoReverseMatch at /groups/professional/
Reverse for 'create_profile' with keyword arguments '{'slug': 'professional', 'noun': 'profile'}' not found. 1 pattern(s) tried: ['groups\\/(?P<slug>[-\\w]+)/$create_(?P<noun>[-\\w]+)/$']
以上注意,关键字参数具有值,并且两个键都处于Django尝试的模式。
urls.py
from . import views
from profile import views as profile_views
app_name = 'group'
group_patterns = ([
path('', views.GroupDetailView.as_view(), name='group_detail'),
re_path(r'^create_(?P<noun>[-\w]+)/$', profile_views.profile_create_view, name='create_profile'),
])
urlpatterns = [
re_path(r'^(?P<slug>[-\w]+)/$', include(group_patterns)),
]
上面的声明中,slug和名词位于两个不同的列表中。我试图将slug和noun放到相同的re_path函数中,但效果很好,但是我不能这样做,因为我需要它们保持分隔。
views.py
class GroupDetailView(DetailView):
model = Group
template_name = group_detail.html
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
group_slug = self.kwargs['slug']
context['group'] = group_slug
return context
group_detail.html模板
<a role="button" href="{% url 'group:create_profile' slug=group noun='profile' %}">Create New Profile</a>
Django是否可以实现一种方法,使关键字参数实际上与子段/字符串位于两个不同的URL列表中时所尝试的模式相匹配?或者,我可以使用任何额外的代码来使其工作吗?也许使用RedirectView?此问题的解决方案也可以应用于主键与在不同列表中的段,用户名和UUID的组合。
答案 0 :(得分:0)
尝试从$
中删除^(?P<slug>[-\w]+)/$
。从错误消息中可以看出,Django将您的网址链转换为带有2个字符串结尾的网址-绝对是一个问题:
groups\\/(?P<slug>[-\\w]+)/$create_(?P<noun>[-\\w]+)/$