简单 URL 映射问题
Simple URL mapping issue
我想映射我的 urls.py 以包含此 url:http://127.0.0.1:8000/activity/Arts%20&%20Crafts/member
这个 url 是由我的 activity.html 模板中的这行代码创建的:
<li><a href='/activity/{{ activity.name }}/member'>{{ activity.name }}</a></li>
Arts & Crafts 是我在模型下创建的对象的名称Activity:
(models.py)
class Activity(models.Model):
name = models.CharField(max_length=50)
comments = models.CharField(max_length=300, null=True, blank=True)
questions = models.ManyToManyField(Question, blank=True)
pub_date = models.DateTimeField('Date published')
def __str__(self):
return self.name
现在,我在 urls.py 中的 url 看起来像这样:
url(r'^activity/{{ models.Activity.name }}/member/$', views.SelectView.as_view(), name='select_member'),
但是没用。当我尝试去 http://127.0.0.1:8000/activity/Arts%20&%20Crafts/member;我收到 'Page Not Found' 错误提示 "The current URL, activity/Arts & Crafts/member, didn't match any of these."
谁能告诉我我的 url 有什么问题以及如何解决?谢谢。
额外信息--
urls.py:
从 django.conf.urls 导入 url
来自 。导入视图
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^detail/$', views.DetailView.as_view(), name='detail'),
url(r'^activity/$', views.ActivityView.as_view(), name='activity'),
url(r'^activity/{{ models.Activity.name }}/member/$', views.SelectView.as_view(), name='select_member'),
]
views.py:
class SelectView(generic.ListView):
template_name = 'expcore/select_member.html'
model = Activity
更新您的 urls.py
以捕获 activity 的名称:
url(r'^activity/(?P<activityname>[^/]+)/member/$',
views.SelectView.as_view(), name='select_member'),
正则表达式将捕获 activity 的名称并将其作为关键字参数传递给视图函数的适当方法(get 或 post)。在该函数中,您可以从 kwargs['activityname']
检索 activity 名称,然后通过 Activity.objects.get(name=kwargs['activityname'])
.
检索具有关联名称的 activity 对象
然后在您的模板中,您可以使用
生成url
<li><a href="{% url 'select_member' activity.name %}">{{ activity.name }}</a></li>
我认为模型变量应该用在模板中,但是你不能把模型变量放在url()中。你应该使用:
url(r'/activity/(?P<activityid>[0-9a-zA-z\.\_]+)/member/$', views.SelectView.as_view),
然后检查 "activityid" 以验证它是否对应于已知的现有页面并最终将其可视化。
这不是定义 url 的正确方法。我建议阅读 Django 文档中的 relevant section,了解如何为视图创建 url。
url(r'^activity/(?P<name>\W+)/member/$', views.SelectView.as_view(), name='select_member'),
除此之外,还有一个问题需要解决。由于您需要通过名称获取对象,因此您需要在视图 class:
中将 slug_url_kwarg
和 slug_field
更改为 name
class SelectView(generic.ListView):
template_name = 'expcore/select_member.html'
model = Activity
slug_url_kwarg = 'name'
slug_field = 'name'
确保在模板中创建 url 时始终利用 {% url %}
模板标签:
<li><a href="{% url 'select_member' activity.name %}">{{ activity.name }}</a></li>
你的urls.py
url(r'^activity/{{ models.Activity.name }}/member/$', views.SelectView.as_view(), name='select_member'),
改为
url(r'^activity/(?P<activity_name>[^/]+)/member/$', views.SelectView.as_view(), name='select_member'),
并且在模板中打印路径时使用
<li><a href="{% url 'select_member' activity.name %}">{{ activity.name }}</a></li>
我想映射我的 urls.py 以包含此 url:http://127.0.0.1:8000/activity/Arts%20&%20Crafts/member
这个 url 是由我的 activity.html 模板中的这行代码创建的:
<li><a href='/activity/{{ activity.name }}/member'>{{ activity.name }}</a></li>
Arts & Crafts 是我在模型下创建的对象的名称Activity:
(models.py)
class Activity(models.Model):
name = models.CharField(max_length=50)
comments = models.CharField(max_length=300, null=True, blank=True)
questions = models.ManyToManyField(Question, blank=True)
pub_date = models.DateTimeField('Date published')
def __str__(self):
return self.name
现在,我在 urls.py 中的 url 看起来像这样:
url(r'^activity/{{ models.Activity.name }}/member/$', views.SelectView.as_view(), name='select_member'),
但是没用。当我尝试去 http://127.0.0.1:8000/activity/Arts%20&%20Crafts/member;我收到 'Page Not Found' 错误提示 "The current URL, activity/Arts & Crafts/member, didn't match any of these."
谁能告诉我我的 url 有什么问题以及如何解决?谢谢。
额外信息-- urls.py: 从 django.conf.urls 导入 url
来自 。导入视图
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^detail/$', views.DetailView.as_view(), name='detail'),
url(r'^activity/$', views.ActivityView.as_view(), name='activity'),
url(r'^activity/{{ models.Activity.name }}/member/$', views.SelectView.as_view(), name='select_member'),
]
views.py:
class SelectView(generic.ListView):
template_name = 'expcore/select_member.html'
model = Activity
更新您的 urls.py
以捕获 activity 的名称:
url(r'^activity/(?P<activityname>[^/]+)/member/$',
views.SelectView.as_view(), name='select_member'),
正则表达式将捕获 activity 的名称并将其作为关键字参数传递给视图函数的适当方法(get 或 post)。在该函数中,您可以从 kwargs['activityname']
检索 activity 名称,然后通过 Activity.objects.get(name=kwargs['activityname'])
.
然后在您的模板中,您可以使用
生成url<li><a href="{% url 'select_member' activity.name %}">{{ activity.name }}</a></li>
我认为模型变量应该用在模板中,但是你不能把模型变量放在url()中。你应该使用:
url(r'/activity/(?P<activityid>[0-9a-zA-z\.\_]+)/member/$', views.SelectView.as_view),
然后检查 "activityid" 以验证它是否对应于已知的现有页面并最终将其可视化。
这不是定义 url 的正确方法。我建议阅读 Django 文档中的 relevant section,了解如何为视图创建 url。
url(r'^activity/(?P<name>\W+)/member/$', views.SelectView.as_view(), name='select_member'),
除此之外,还有一个问题需要解决。由于您需要通过名称获取对象,因此您需要在视图 class:
中将slug_url_kwarg
和 slug_field
更改为 name
class SelectView(generic.ListView):
template_name = 'expcore/select_member.html'
model = Activity
slug_url_kwarg = 'name'
slug_field = 'name'
确保在模板中创建 url 时始终利用 {% url %}
模板标签:
<li><a href="{% url 'select_member' activity.name %}">{{ activity.name }}</a></li>
你的urls.py
url(r'^activity/{{ models.Activity.name }}/member/$', views.SelectView.as_view(), name='select_member'),
改为
url(r'^activity/(?P<activity_name>[^/]+)/member/$', views.SelectView.as_view(), name='select_member'),
并且在模板中打印路径时使用
<li><a href="{% url 'select_member' activity.name %}">{{ activity.name }}</a></li>