Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 分页在第一页上不起作用。当前路径&;空缺=2,没有';我一个也配不上_Python_Django - Fatal编程技术网

Python 分页在第一页上不起作用。当前路径&;空缺=2,没有';我一个也配不上

Python 分页在第一页上不起作用。当前路径&;空缺=2,没有';我一个也配不上,python,django,Python,Django,我正在Django中实现分页搜索。 单击下一个分页按钮时,收到错误: 找不到页面(404) 请求方法:获取 请求URL: 此外,搜索后分页也可以工作(例如,我搜索了一些内容,然后单击分页,它就工作了) 我认为views.py和url.py的问题 我怎样才能解决这个问题 型号.py class Company(models.Model): name = models.CharField(max_length=200) about = models.TextField()

我正在Django中实现分页搜索。 单击下一个分页按钮时,收到错误:

找不到页面(404) 请求方法:获取 请求URL:

此外,搜索后分页也可以工作(例如,我搜索了一些内容,然后单击分页,它就工作了)

我认为views.py和url.py的问题 我怎样才能解决这个问题

型号.py

class Company(models.Model):
    name = models.CharField(max_length=200)
    about = models.TextField()

    def __str__(self):
        return self.name


class Vacancy(models.Model):
    company_key = models.ForeignKey(Company, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    salary = models.CharField(max_length=200, default='40.000')
    text = models.TextField(default="The text about vacancy")
    city = models.CharField(max_length=200, default='Москва')
    date_str = models.CharField(max_length=50, default='12 сентября')

    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)

    CHOICES = [
        ('ALL', 'ALL'),
        ('IT', 'IT'),
        ('FINANCE', 'FINANCE'),
        ('OTHER', 'OTHER'),
    ]
    department = models.CharField(
        max_length=20,
        choices=CHOICES,
        default='ALL',
    )

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title
urlpatterns = [
    path('', HomePageView.as_view(), name='vacancy_list'),
    path('search/', SearchResultsView.as_view(), name='search_results'),
    path('vacancy/<int:pk>/', views.vacancy_detail, name='vacancy_detail'),

    path('accounts/login/', BBLoginView.as_view(), name='login'),
    path('accounts/profile/', profile, name='profile'),
    path('accounts/logout/', BBLogoutView.as_view(), name='logout'),
    ...
class HomePageView(ListView):
    model = Vacancy
    template_name = 'vacancy_list/vacancy_list.html'
    paginate_by = 5
    page_kwarg = 'vacancy'
    context_object_name = 'vacancies'


def vacancy_detail(request, pk):
    vacancy = get_object_or_404(Vacancy, pk=pk)
    return render(request, 'vacancy_list/vacancy_detail.html', {'vacancy': vacancy})


class SearchResultsView(ListView):
    model = Vacancy
    template_name = 'vacancy_list/search_results.html'
    paginate_by = 5
    page_kwarg = 'vacancy'
    context_object_name = 'vacancies'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['query'] = self.request.GET.get('q')
        # added param
        context['query2'] = self.request.GET.get('q2')
        return context

    def get_queryset(self): # new
        query = self.request.GET.get('q')
        query2 = self.request.GET.get('q2')
        object_list = Vacancy.objects.filter(
             Q(title__icontains=query) and Q(department__icontains=query2)
        )
        return object_list
url.py

class Company(models.Model):
    name = models.CharField(max_length=200)
    about = models.TextField()

    def __str__(self):
        return self.name


class Vacancy(models.Model):
    company_key = models.ForeignKey(Company, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    salary = models.CharField(max_length=200, default='40.000')
    text = models.TextField(default="The text about vacancy")
    city = models.CharField(max_length=200, default='Москва')
    date_str = models.CharField(max_length=50, default='12 сентября')

    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)

    CHOICES = [
        ('ALL', 'ALL'),
        ('IT', 'IT'),
        ('FINANCE', 'FINANCE'),
        ('OTHER', 'OTHER'),
    ]
    department = models.CharField(
        max_length=20,
        choices=CHOICES,
        default='ALL',
    )

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title
urlpatterns = [
    path('', HomePageView.as_view(), name='vacancy_list'),
    path('search/', SearchResultsView.as_view(), name='search_results'),
    path('vacancy/<int:pk>/', views.vacancy_detail, name='vacancy_detail'),

    path('accounts/login/', BBLoginView.as_view(), name='login'),
    path('accounts/profile/', profile, name='profile'),
    path('accounts/logout/', BBLogoutView.as_view(), name='logout'),
    ...
class HomePageView(ListView):
    model = Vacancy
    template_name = 'vacancy_list/vacancy_list.html'
    paginate_by = 5
    page_kwarg = 'vacancy'
    context_object_name = 'vacancies'


def vacancy_detail(request, pk):
    vacancy = get_object_or_404(Vacancy, pk=pk)
    return render(request, 'vacancy_list/vacancy_detail.html', {'vacancy': vacancy})


class SearchResultsView(ListView):
    model = Vacancy
    template_name = 'vacancy_list/search_results.html'
    paginate_by = 5
    page_kwarg = 'vacancy'
    context_object_name = 'vacancies'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['query'] = self.request.GET.get('q')
        # added param
        context['query2'] = self.request.GET.get('q2')
        return context

    def get_queryset(self): # new
        query = self.request.GET.get('q')
        query2 = self.request.GET.get('q2')
        object_list = Vacancy.objects.filter(
             Q(title__icontains=query) and Q(department__icontains=query2)
        )
        return object_list
空缺列表.html

{% block content %}

<div class="container col-md-8" style="margin:20px;">
    <div class="container" style="margin-top: 40px; font-size: 2rem; padding-left: 0px;">
        <form action="{% url 'search_results' %}" method="get">
            <div class="row">
                 <div class="col-lg-8 col-md-6 col-xs-12">
                     <input name="q" type="text" placeholder="Search..." class="form-control">
                 </div>
                 <div class="col-lg-3 col-md-4 col-xs-12">
                    <select name="q2" class="form-control" id="exampleFormControlSelect1">
                        <option>ALL</option>
                        <option>IT</option>
                        <option>Finance</option>
                        <option>Other</option>
                    </select>
                 </div>
                 <div class="col-lg-1 col-md-2 col-xs-12" style="padding-left: 0px;">

                     <button  class="btn btn-primary">Primary</button>
                 </div>
            </div>
        </form>
    </div>


    {% for vacancy in vacancies %}
    <div class="card">
        <div class="card-header">
            <div class="row">
                <div class="col-md-8">
                    <h1><a href="{% url 'vacancy_detail' pk=vacancy.pk %}">{{vacancy.title}}</a></h1>
                </div>
                <div class="col-md-4 text-right">
                    <p> {{ vacancy.salary}} </p>
                </div>
            </div>
        </div>
        <div class="card-body" style="white-space:normal">
            <p class="text-secondary">{{vacancy.company_key.name}}</p>
            <p> Описание вакансии: Компания Sixhands, занимающаяся разработкой мобильных приложений и веб-порталов в Санкт-Петербурге, ищет Backend-разработчика для создания серверной части мобильных приложений.
            <div class="row">
                <div class="col-md-8">
                    <p>{{vacancy.city}} </p>
                </div>
                <div class="col-md-4 text-right">
                    <p> {{vacancy.date_str }} </p>
                </div>
            </div>

        </div>



    </div>
    {% endfor %}


    <!-- Paginator -->
    <div class="container" style="font-size: 2rem;">
    <div class="row justify-content-center">
    <ul class="pagination">
        {% if page_obj.has_previous %}
            <li class="page-item"><a class="page-link" href="{{ request.get_full_path }}?vacancy={{ page_obj.previous_page_number }}">Previous</a></li>
        {% else %}
            <li class="page-item disabled">
                <span class="page-link">Previous</span>
            </li>
        {% endif %}
        <li class="page-item disabled">
                <span class="page-link">Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}</span>
        </li>
        {% if page_obj.has_next %}
           <li class="page-item"><a class="page-link" href="{{ request.get_full_path }}?vacancy={{ page_obj.next_page_number }}">Next</a></li>
        {% else %}
           <li class="page-item disabled">
              <span class="page-link">Next</span>
           </li>
        {% endif %}

    </ul>
    </div>
    </div>
</div> <!-- wrapper end -->

{% endblock %}
{%block content%}
全部的
信息技术
财务
其他
主要的,重要的
{空缺百分比中的空缺百分比}
{{空缺.薪金}

{{{emptance.company_key.name}

аааааааааааааааааа六手,заааааааааааааааа,后端-后端-后端。 {{空缺.城市}

{{空缺日期{u str}}

{%endfor%}
    {%如果页面_obj.has_previous%}
  • {%else%}
  • 以前的
  • {%endif%}
  • 第{{Page_obj.paginator.num_pages}页中的{{{Page_obj.number}}
  • {%如果页面_obj.has_next%}
  • {%else%}
  • 下一个
  • {%endif%}
{%endblock%}
查询字符串以URL路径后的
开头,附加

由于您有
/&emptance=2
,它被视为(或部分)常规URL路径,因此与
URL模式中的URL匹配。由于没有这样的URL,您将得到404

因此,将
替换为

当您有多个查询Sting时,您需要使用
&
作为分隔符,例如
/spam/egg/?page=2&foo=bar


编辑:

要防止保留上一个查询字符串,请在模板中使用
request.path
(返回不带查询字符串的当前路径)而不是
request.get\u full\u path()
(返回带查询字符串的当前路径):

href="{{ request.path }}

谢谢,但是当我点击两次时,收到了错误(错误的url)@alcoder检查您的模板
空缺列表/空缺列表.html
,看看您是如何生成分页url的。似乎您正在保留查询字符串(例如,通过使用查询字符串引用当前URL),删除它们,仅使用URL路径。