Python Django 1.6基于类的视图:如何在url模板标记中获得正确的路径/to/view/in

Python Django 1.6基于类的视图:如何在url模板标记中获得正确的路径/to/view/in,python,django,Python,Django,在一个名为“事件”的应用程序中,我有两个基于ListView的视图。一个是位于/events/的“事件索引”,另一个是位于/events/pass/的“过去事件索引” 直接导航到两个URL会加载所需的页面a-OK。我的问题是试图获取一个{%url%}模板标记以正确链接到“过去的事件索引” apps/events/url.py: from django.conf.urls import patterns, url from .views import EventDetailView, Event

在一个名为“事件”的应用程序中,我有两个基于ListView的视图。一个是位于/events/的“事件索引”,另一个是位于/events/pass/的“过去事件索引”

直接导航到两个URL会加载所需的页面a-OK。我的问题是试图获取一个{%url%}模板标记以正确链接到“过去的事件索引”

apps/events/url.py:

from django.conf.urls import patterns, url 
from .views import EventDetailView, EventListView, PastEventListView

urlpatterns = patterns(
    'apps.events.views',
    url(r'^$', EventListView.as_view(), name='events_index'),
    url(r'^past/$', PastEventListView.as_view(), name='past_events_index'),
    url(r'^(?P<slug>[-\w]+)/$', EventDetailView.as_view(), name="events_show"),
    )   
<a href="{% url 'events:past_events_index' %}">Past Events</a>
from .models import Event
from django.views.generic import ListView
from pure_pagination.mixins import PaginationMixin
from datetime import datetime

class EventListView(ListView):
    date_today = datetime.now().date()

    queryset = Event.objects.published().filter(is_feature=False).\
        exclude(start_date__lte=date_today, end_date__isnull=True).\
        exclude(start_date__lte=date_today, end_date__lte=date_today).\
        exclude(start_date__isnull=True, end_date__lte=date_today)

    template_name = "events/index.html"

    def get_context_data(self, **kwargs):
        date_today = datetime.now().date()

        context = super(EventListView, self).get_context_data(**kwargs)

        context['featured_event'] = Event.objects.published().filter(is_feature=True). \
            exclude(start_date__lte=date_today, end_date__isnull=True). \
            exclude(start_date__lte=date_today, end_date__lte=date_today). \
            exclude(start_date__isnull=True, end_date__lte=date_today)

        past_events = Event.objects.published().filter(is_feature=False).\
            exclude(start_date__gte=date_today).\
            exclude(start_date__isnull=True, end_date__gte=date_today)

        context['past_events'] = past_events.count()

        return context


class PastEventListView(PaginationMixin, ListView):
    date_today = datetime.now().date()

    queryset = Event.objects.published().filter(is_feature=False).\
        exclude(start_date__gte=date_today).\
        exclude(start_date__isnull=True, end_date__gte=date_today).\
        reverse()

    template_name = "events/index.html"
    paginate_by = 10

    def get_context_data(self, **kwargs):
        context = super(PastEventListView, self).get_context_data(**kwargs)

        context['is_past'] = True

        return context


class EventDetailView(StatusDetailView):
    model = Event
from django.conf import settings
from django.conf.urls import include, patterns, url
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.contrib.sitemaps.views import sitemap
from django.views.generic.base import RedirectView

from cms.sitemaps import CMSSitemap

from apps.news.sitemaps import NewsSitemap


admin.autodiscover()

sitemaps = {
    'news': NewsSitemap,
    'cmspages': CMSSitemap,
}


urlpatterns = patterns(
    '',

    url(r'^sitemap\.xml', sitemap, {'sitemaps': sitemaps}),

    url(r'^garment/', include('apps.garment.urls')),

    # Django Admin
    (r"^%s/" % settings.ADMIN_NAMESPACE, include(admin.site.urls)),

    url(r"^", include('cms.urls')),

    # Urls from apps
    url(r'^', include('apps.news.urls')),
    url(r'^events/', include('apps.events.urls', namespace='events', app_name='events')),
)

if getattr(settings, "LOCAL_SERVE", False):
    urlpatterns = patterns(
        'django.views.static',
        url(
            r"^%s(?P<path>.*)$" % settings.MEDIA_URL.lstrip('/'),
            "serve",
            {   
                'document_root': settings.MEDIA_ROOT,
                'show_indexes': True,
            }),
    ) + staticfiles_urlpatterns() + urlpatterns
设置/url.py:

from django.conf.urls import patterns, url 
from .views import EventDetailView, EventListView, PastEventListView

urlpatterns = patterns(
    'apps.events.views',
    url(r'^$', EventListView.as_view(), name='events_index'),
    url(r'^past/$', PastEventListView.as_view(), name='past_events_index'),
    url(r'^(?P<slug>[-\w]+)/$', EventDetailView.as_view(), name="events_show"),
    )   
<a href="{% url 'events:past_events_index' %}">Past Events</a>
from .models import Event
from django.views.generic import ListView
from pure_pagination.mixins import PaginationMixin
from datetime import datetime

class EventListView(ListView):
    date_today = datetime.now().date()

    queryset = Event.objects.published().filter(is_feature=False).\
        exclude(start_date__lte=date_today, end_date__isnull=True).\
        exclude(start_date__lte=date_today, end_date__lte=date_today).\
        exclude(start_date__isnull=True, end_date__lte=date_today)

    template_name = "events/index.html"

    def get_context_data(self, **kwargs):
        date_today = datetime.now().date()

        context = super(EventListView, self).get_context_data(**kwargs)

        context['featured_event'] = Event.objects.published().filter(is_feature=True). \
            exclude(start_date__lte=date_today, end_date__isnull=True). \
            exclude(start_date__lte=date_today, end_date__lte=date_today). \
            exclude(start_date__isnull=True, end_date__lte=date_today)

        past_events = Event.objects.published().filter(is_feature=False).\
            exclude(start_date__gte=date_today).\
            exclude(start_date__isnull=True, end_date__gte=date_today)

        context['past_events'] = past_events.count()

        return context


class PastEventListView(PaginationMixin, ListView):
    date_today = datetime.now().date()

    queryset = Event.objects.published().filter(is_feature=False).\
        exclude(start_date__gte=date_today).\
        exclude(start_date__isnull=True, end_date__gte=date_today).\
        reverse()

    template_name = "events/index.html"
    paginate_by = 10

    def get_context_data(self, **kwargs):
        context = super(PastEventListView, self).get_context_data(**kwargs)

        context['is_past'] = True

        return context


class EventDetailView(StatusDetailView):
    model = Event
from django.conf import settings
from django.conf.urls import include, patterns, url
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.contrib.sitemaps.views import sitemap
from django.views.generic.base import RedirectView

from cms.sitemaps import CMSSitemap

from apps.news.sitemaps import NewsSitemap


admin.autodiscover()

sitemaps = {
    'news': NewsSitemap,
    'cmspages': CMSSitemap,
}


urlpatterns = patterns(
    '',

    url(r'^sitemap\.xml', sitemap, {'sitemaps': sitemaps}),

    url(r'^garment/', include('apps.garment.urls')),

    # Django Admin
    (r"^%s/" % settings.ADMIN_NAMESPACE, include(admin.site.urls)),

    url(r"^", include('cms.urls')),

    # Urls from apps
    url(r'^', include('apps.news.urls')),
    url(r'^events/', include('apps.events.urls', namespace='events', app_name='events')),
)

if getattr(settings, "LOCAL_SERVE", False):
    urlpatterns = patterns(
        'django.views.static',
        url(
            r"^%s(?P<path>.*)$" % settings.MEDIA_URL.lstrip('/'),
            "serve",
            {   
                'document_root': settings.MEDIA_ROOT,
                'show_indexes': True,
            }),
    ) + staticfiles_urlpatterns() + urlpatterns
来自django.conf导入设置的

从django.conf.url导入包括、模式、url
从django.contrib导入管理
从django.contrib.staticfiles.url导入staticfiles\u urlpatterns
从django.contrib.sitemaps.views导入站点地图
从django.views.generic.base导入重定向视图
从cms.sitemaps导入CMSSitemap
从apps.news.sitemaps导入新闻站点地图
admin.autodiscover()
网站地图={
“新闻”:新闻网站地图,
“cmspages”:CMSSitemap,
}
urlpatterns=模式(
'',
url(r'^sitemap\.xml',sitemap,{'sitemaps':sitemaps}),
url(r“^garment/”,包括('apps.garment.url'),
#Django管理员
(r“^%s/%settings.ADMIN_命名空间,包括(ADMIN.site.url)),
url(r“^”,包括('cms.url'),
#来自应用程序的URL
url(r'^',包括('apps.news.url'),
url(r“^events/”,包括('apps.events.url',namespace='events',app_name='events')),
)
如果getattr(设置为“本地服务”,则为False):
urlpatterns=模式(
“django.views.static”,
网址(
r“^%s(?P.*)$%settings.MEDIA_URL.lstrip('/'),
“发球”,
{   
“document\u root”:settings.MEDIA\u root,
“显示索引”:True,
}),
)+静态文件\u urlpatterns()+urlpatterns

使用名称空间解决了这一问题。(然后删除覆盖命名空间的模型上的自定义url前缀字段)


在main url.py中命名事件URL的名称空间,然后使用“事件:过去的事件\u索引”


在主
url.py
中为事件URL命名,然后使用
“事件:过去的事件\u索引”
刚刚尝试了命名,我的链接仍然指向/pass/。我将模板标记更改为{%url'events:pass_events\u index'},现在我在settings/url.py中得到了这样的信息:“code”urlpatterns=patterns('code'','code''code'“code''code”url(r'^',include('apps.events.url',namespace='events',app name='events'),'code')?粘贴问题。重试:刚刚尝试了名称空间,我的链接仍然指向/pass/。我将模板标记更改为{%url'事件:过去的事件\索引'%},现在我在settings/urls.py:[link]中得到了这个结果。请显示上面添加的主url.py.settings/urls.py,并编辑模板标记以使用事件命名空间。到目前为止,结果是一样的。