我正在尝试做的事情 我有一个简单的视图,它将pk作为参数并执行操作.这个工作正常,直到pks大于999.现在他们返回404s.我正在努力解决这个问题.
我尝试过的内容 我的观点如下:
def request_publication(request, pk):
...
article = News.all_news.get(pk=pk) # all_news is a manager including unpublished articles
article.status = article.HIDDEN_STATUS
article.save()
...
Run Code Online (Sandbox Code Playgroud)
网址正则表达式是这样的:
regex=r'^request-publication/(?P<pk>\d+)/',
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
regex=r'^request-publication/(?P<pk>\d{4})/',
Run Code Online (Sandbox Code Playgroud)
这使得它在pks <1000时失败,但仍不适用于pk> 999.
完整的urls.py是:
# core Django imports
from django.conf.urls import patterns, include, url
# local imports
from .models import News, Category, Attachment
from .views import (
NewsHomeView,
CategoryHomeView,
NewsDetailView,
NewsYearArchiveView,
NewsMonthArchiveView,
NewsDayArchiveView,
NewsListView,
NewsCreateView,
NewsUpdateView,
publish,
request_publication,
)
urlpatterns = patterns('',
url(
regex = r'^$',
view = NewsHomeView.as_view(),
name = "news_home",
),
url(
regex = r'^add/$',
view = NewsCreateView.as_view(),
name = 'news_add',
),
url(
regex = r'^update/(?P<pk>\d+)/$',
view = NewsUpdateView.as_view(),
name = 'news_update',
),
url(
regex = r'^(?P<slug>[-\w]+)/$',
view = CategoryHomeView.as_view(),
name = 'category_detail',
),
url(
regex = r'^tag/(?P<tag_slug>[-\w]+)/$',
view = NewsListView.as_view(),
name = 'news_tag_list',
),
url(
regex = r'^(?P<category>[-\w]+)/(?P<year>\d{4})/$',
view = NewsYearArchiveView.as_view(),
name = "year_archive",
),
url(
regex = r'^(?P<category>[-\w]+)/(?P<year>\d{4})/(?P<month>\w{3})/$',
view = NewsMonthArchiveView.as_view(),
name = "month_archive",
),
url(
regex = r'^(?P<category>[-\w]+)/(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/$',
view = NewsDayArchiveView.as_view(),
name = "day_archive",
),
url(
regex = r'^(?P<category>[-\w]+)/(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/(?P<slug>[-\w]+)/$',
view = NewsDetailView.as_view(),
name = "article",
),
url(
regex = r'^publish/(?P<pk>\d+)/$',
view = publish,
name = 'publish',
),
url(
regex = r'^request-publication/(?P<pk>\d+)/$',
view = request_publication,
name = 'request_publication',
),
)
Run Code Online (Sandbox Code Playgroud)
News.all_news.get(pk=1000)从shell 调用是完美的,all_news作为标准Django objects管理器的别名,因为我已经覆盖objects了自定义管理器.
我所期待的, 我看不出有什么理由会失败.我期待视图成功返回.
实际发生的事情 标准404页面.
限制 由于公司限制,我无法单独升级到更新的Django.
问题 有没有其他人经历过这个,你是如何解决的?
请求request-publication/1000被year-archive视图捕获,因为它与r'^(?P<category>[-\w]+)/(?P<year>\d{4})/$三位数pk不匹配时的模式匹配.
因此,您获得404,因为您在1000年中没有发布与"请求 - 发布"子弹匹配的项目.
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |