首页 > 解决方案 > 为什么Django pagenotAnTntger 除了生成?

问题描述

我有服务器错误!

我想制作projectBoard主页 当我点击作品的标题时,我想显示作品的详细信息。

但是 pageNotAnInteger 除了生成

在 projectMain.html 中

<a href="{% url 'fileDetail' file_title=post.file_title %}"> {{ post.file_title }} </a>

通过这句话,我想深入到写作的细节。

但是,我不能。

我以为这些过程

  1. 点击文章的标题。

  2. 在 projectMain.html 中,代码 , <a href="{% url 'fileDetail' file_title=post.file_title %}"> {{ post.file_title }} </a>被执行。

  3. 然后, ' urlpattern url(r'^project/(?P<file_title>.+)/$', views.fileDetail, name='fileDetail'),' 被执行

  4. 在views.py中,函数fileDetail()被执行,执行projectDetail.html会被渲染

但导致 pageNotAnIntegerError

我该如何解决?

项目Main.html

{% extends 'Project/projectBase.html' %}

{% block content %}


<div class="container">

  <!-- Page Heading/Breadcrumbs -->
  <div class="row">
    <h1 class="col mt-4 mb-3">Project
    </h1>

    <div class="col mt-4 mb-4 input-group">
      <input type="text" class="form-control" placeholder="Search for...">
      <span class="input-group-btn">
            <button type="submit", class="btn btn-secondary">Go!</button>
          </span>
    </div>
  </div>


        <a href="{% url 'newFile' project_name=project_name%}"> <p> FileUpload </p> </a>
        <a href="{% url 'branchAdminCertification' project_name=project_name%}"> <p> Set mainBranch </p> </a>


  <div class="row">
    {% for post in posts %}

    <div class="col-lg-4 col-sm-6 portfolio-item">
      <div class="card h-100">
        <div class="thumbnail-wrapper">
          <div class="thumbnail">

            <h4 class="card-title">
              <a href="{% url 'fileDetail' file_title=post.file_title %}"> {{ post.file_title }} </a>
            </h4>

          </div>
        </div>

        <div class="card-body">
          <p>{{post.origin_date}}에 게시</p>
          <p>작성자 : {{post.user_name}}</p>
          <p class="card-text">
            {% if post.content|length > 65%}
            {{ post.content|slice:"0:65"|add:"  ..."}}
            {% else %}
            {{ post.content }}
            {% endif %}
          </p>
        </div>
      </div>
    </div>

    {% endfor %}
  </div>

 {% if posts.has_other_pages %}
  <!-- Pagination -->
  <ul class="pagination justify-content-center">

    {% if posts.has_previous %}
    <li class="page-item"><a class="page-link" href="?page=1">&laquo;</a></li>
    {% else %}
    <li class="disabled"><span>&laquo;</span></li>
    {% endif %}

    {% for i in posts.paginator.page_range %}
    <li class="page-item"><a class="page-link" href="?page={{ i }}">{{ i }}</a></li>
    {% endfor %}

    {% if posts.has_next %}
    <li class="page-item"><a class="page-link" href="?page={{ max_index }}">&raquo;</a></li>
    {% else %}
    <li class="disabled"><span>&raquo;</span></li>
    {% endif %}
  </ul>
  {% endif %}

</div>
{% endblock %}

projectDetail.html

{% extends 'Project/projectBase.html' %}

{% block content %}

<!-- Page Content -->
<div class="post">
  <div class="container">

    <!-- Page Heading/Breadcrumbs -->
    <h1 class="mt-4 mb-3">{{ post.file_title }}</h1>

    <div class="row">

      <!-- Post Content Column -->
      <div class="col-lg-12">

        <!-- Date/Time -->
        <p>{{post.final_date}}에 최종 게시됨.</p>
        <p>작성자 : {{post.user_name}}</p>

        <hr>

        <!-- Post Content -->
        <p class="lead"> {{ post.content|linebreaksbr }} </p>

        <hr>

        <p>Parent ID : {{post.parent_file_id}}</p>
        <p>This file ID : {{post.file_id}}</p>

        <hr>

        {% if post.file %}
        <hr>
        <a id="id_uploaded_file" href="{{ post.file.url }}" download> 첨부파일 다운로드 </a>
        {% endif %}

<hr>
<a href="{% url 'editFile' file_title=post.file_title %}">edit</a>
<hr>
  </div>
</div>
<!-- /.row -->

</div>
</div>

{% endblock %}

视图.py

def mainProject(request, project_name):
    check = auth_test(request)
    posts = ProjectFiles.objects.filter(project_name = project_name)
    posts = posts.order_by('-origin_date')
    paginator = Paginator(posts, 6)
    page = request.GET.get('page')

    try:
        posts = paginator.page(page)
    except PageNotAnInteger:
         # If page is not an integer, deliver first page.
        posts = paginator.page(1)
        print("PageNotAnInteger")
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        posts = paginator.page(paginator.num_pages)

    max_index = len(paginator.page_range)
    return render(request, 'Project/projectMain.html', {
            'project_name': project_name,
            'posts': posts,
            #'check ' : check,
            'max_index': max_index,})




def fileDetail(request, file_title):
    check = auth_test(request)
    post = get_object_or_404(ProjectFiles, project_name=check['project_name'], file_title=file_title)
    project_name = post.project_name
    return render(request, 'Project/projectDetail.html', {'post': post, 'check': check, 
                                                          'file_title': file_title, 
                                                          'project_name': project_name,})

我认为它可能是从制作文件中生成的,我添加了文件制作代码

项目编辑.html

{% extends 'Project/projectBase.html' %}

{% block content %}
<div class="container">

      <!-- Page Heading/Breadcrumbs -->
      <h1 class="mt-4 mb-3">Upload & Edit </h1>

 <form
    method="POST"
    action=""
    enctype="multipart/form-data"
>
    {% csrf_token %}
    {{ form.as_p }}
     <br>
     <h10> upload files.</h10>
     <br>
        <button type="submit" class="save btn btn-default">Save</button>
    </form>
</div>
{% endblock %}

视图.py

def newFile(request, project_name):
    check = auth_test(request)
    if request.method == "GET":
        form = FileForm()
    elif request.method == "POST":
        form = FileForm(request.POST, request.FILES)

        if form.is_valid():
            post = form.save(commit=False)
            post.origin_date = timezone.now()
            post.final_date = timezone.now()
            post.user_name=check['user_name']
            post.project_name=check['project_name']
            post.save()
            return redirect(reverse('mainProject', kwargs={'project_name': project_name}))
    ctx = {
        'project_name' : project_name,
        'form': form,
        'check': check
    }
    return render(request, 'Project/projectEdit.html', ctx)

环境:

Request Method: GET
Request URL: http://127.0.0.1:8000/project/test1/

Django Version: 2.1.2
Python Version: 3.7.0
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'Project']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']

追溯 :

File "C:\Users\Kimsunwoo\Anaconda3\lib\site-packages\django\core\paginator.py" in validate_number
  40.             number = int(number)

During handling of the above exception (int() argument must be a string, a bytes-like object or a number, not 'NoneType'), another exception occurred:

File "C:\Users\Kimsunwoo\Anaconda3\lib\site-packages\django\core\handlers\exception.py" in inner
  34.             response = get_response(request)

File "C:\Users\Kimsunwoo\Anaconda3\lib\site-packages\django\core\handlers\base.py" in _get_response
  126.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\Kimsunwoo\Anaconda3\lib\site-packages\django\core\handlers\base.py" in _get_response
  124.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\Kimsunwoo\SEI\DjangoProject\Project\views.py" in mainProject
  158.         posts = paginator.page(page)

File "C:\Users\Kimsunwoo\Anaconda3\lib\site-packages\django\core\paginator.py" in page
  67.         number = self.validate_number(number)

File "C:\Users\Kimsunwoo\Anaconda3\lib\site-packages\django\core\paginator.py" in validate_number
  42.             raise PageNotAnInteger(_('That page number is not an integer'))

Exception Type: PageNotAnInteger at /project/test1/
Exception Value: 페이지 번호가 정수가 아닙니다.

标签: django

解决方案


推荐阅读