简单 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_kwargslug_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>

Refer this link

你的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>