簡體   English   中英

python3 django1.8 mysql5.5給出未找到的頁面(404)而sqlite正常工作

[英]python3 django1.8 mysql5.5 gives page not found (404) while sqlite works fine

MySQL的:

DATABASES = {
    'default': {
        'NAME': 'ch01',
        'ENGINE': 'mysql.connector.django',
        'HOST':'172.17.100.18',
        'USER': 'test',
        'PASSWORD': '123456',
        'OPTIONS': {
          'autocommit': True,
        },
    }
}

sqlite:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

blog / urls.py:

from django.conf.urls import url, include
from . import views

urlpatterns = [
    #url(r'^$', views.post_list, name='post_list'),
    url(r'^$', views.PostListView.as_view(), name='post_list'),
    url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/(?P<post>[-\w]+)/$',
        views.post_detail,
        name='post_detail'),
]

當我使用第二個數據庫設置運行服務器時,項目工作正常,但是當我使用mysql運行第一個設置文件時,django對所有URL返回404錯誤。

查看博客應用程序:

from .models import Post
import logging

def post_list(request):
    object_list = Post.published.all()
    paginator = Paginator(object_list, 3) # 3 posts in each page
    page = request.GET.get('page')
    try:
        posts = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer deliver the first page
        posts = paginator.page(1)
    except EmptyPage:
        # If page is out of range deliver last page of results
        posts = paginator.page(paginator.num_pages)
    #logging.console(page)
    return render(request, 'blog/post/list.html', {'posts': posts})

class PostListView(ListView):
    queryset = Post.published.all()
    context_object_name = 'posts'
    paginate_by = 4
    template_name = 'blog/post/list.html'

def post_detail(request, year, month, day, post):
    post = get_object_or_404(Post, slug=post, status='published',
                             publish__year=year, publish__month=month,
                             publish__day=day)
    return render(request, 'blog/post/detail.html', {'post': post})

mysql中的數據:

+----+-------+-------+------+---------------------+---------------------+---------------------+-----------+-----------+
| id | title | slug  | body | publish             | created             | updated             | status    | author_id |
+----+-------+-------+------+---------------------+---------------------+---------------------+-----------+-----------+
|  1 | Test1 | test1 | ??   | 2016-10-24 03:46:04 | 2016-10-24 03:46:16 | 2016-10-24 03:46:16 | published |         1 |
+----+-------+-------+------+---------------------+---------------------+---------------------+-----------+-----------+

錯誤信息:

找不到頁面(404)請求方法:GET請求URL: http ://172.17.100.19/blog/2016/10/24/test1/提出者:blog.views.post_detail

沒有帖子匹配給定的查詢。

您看到此錯誤是因為Django設置文件中的DEBUG = True。 將其更改為False,Django將顯示標准的404頁面。

models.py

from django.contrib.auth.models import User
from django.core.urlresolvers import reverse


class PublishedManager(models.Manager):

    def get_queryset(self):
        return super(PublishedManager, self).get_queryset()\
                .filter(status='published')

class Post(models.Model):
    STATUS_CHOICES = (
            ('draft', 'Draft'),
            ('published', 'Published'),
            )
    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250, unique_for_date="publish")
    author = models.ForeignKey(User, related_name='blog_posts')
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default="draft")

    objects = models.Manager()
    published = PublishedManager()


    class Meta:
        ordering = ('-publish', )

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('blog:post_detail', args=[self.publish.year,
            self.publish.strftime('%m'),
            self.publish.strftime('%d'),
            self.slug])

USE_TZ = False ,一切正常。

USE_TZ = True它將根據settings.py中指定的時區存儲時間即,如果TIME_ZONE = 'UTC'它將存儲在UTC中,而在顯示模板時,它將位於本地時區。

發生錯誤404的原因是由於時區設置,URL中的日期與正確的日期不匹配。要避免這種情況,可以將USE_TZ設置為False

參考: USE_TZ = False和USE_TZ = True之間的差異

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM