Django Detail View返回404错误(其他stackoverflow解决方案不起作用)

问题描述 投票:1回答:3

我最近问了一个关于DetialViews和linkify的问题,但是意识到,问题不在于linkify,而是让细节视图显示出来。每当我试图让细节视图出现时,我都会收到“404错误”。如何让这个工作?我已经在这方面工作了一个星期,请帮忙。我不知道在哪里看。

这是urls.py网址模式:(我尝试了一堆不同的模式,无法让它工作。)

path('hospitals/', views.HospitalListView.as_view(), name='hospital_list'),
re_path(r'^hospitals/(?P<pk>\d+)$', views.HospitalDetailView.as_view(), name='hospital_detail')

这是我的views.py:

class HospitalListView(generic.ListView):
    model = Hospital
    context_object_name = 'hospital_list'
    template_name = 'hospital_list.html'

class HospitalDetailView(generic.DetailView):
    model = Hospital
    def hospital_detail_view(request, primary_key):
        hospital = get_object_or_404(Hospital, pk='primary_key')
        return render(request, 'hospital_detail.html', {'hospital': hospital})

这是我的models.py。

class Hospital(models.Model):
    """Model representing Hospitals."""
    name = models.CharField(max_length=200, primary_key=True)
    hopid = models.UUIDField(default=uuid.uuid4, help_text='Unique ID for this particular hospital in database')
    location_text = models.CharField(max_length = 800)

    class Meta:
        ordering = ['hopid']

    def __str__(self):
        """String for representing the Model object."""
        return f'{self.name} ({self.location_text})'

这是我的html文件 - hospital_list.html

{% extends "base_generic.html" %}

{% block content %}
  <h1>Hospital List</h1>
  {% if hospital_list %}
  <ul>
    {% for hospital in hospital_list %}
      <li>
        <a href="{% url 'hospital_detail' pk=hospital.pk %}">{{ hospital.name }}</a> ({{hospital.location_text}})
      </li>
    {% endfor %}
  </ul>
  {% else %}
    <p>There are no hospitals listed in your area.</p>
  {% endif %}
{% endblock %}

这是hospital_detail.html

{% extends "base_generic.html" %}

{% block content %}
  <h1> Hospital Name: {{ hospital.name }}</h1>
    <p><strong> Location: </strong>{{ hospital.location_text }}</p>
    <p><strong> Phone Number:</strong> {{ hospital.phone }}</p>
    <p><strong> Reviews: {{ hospital.reviews }</p>
{% endblock %}

已解决:感谢大家的帮助。我不知道出了什么问题。我做了一些事情并解决了它。

  1. 我将主键更改为医院名称而不是uuid。我把它称为主键。
  2. 我删除了我的数据库并重新进行了迁移。

这解决了它。任何帮助理解为什么会很棒?

django django-views
3个回答
0
投票

可能是因为你正在为pk分配一个字符串

class HospitalListView(generic.ListView):
    model = Hospital
    context_object_name = 'hospital_list'
    template_name = 'hospital_list.html'

class HospitalDetailView(generic.DetailView):
    model = Hospital
    def hospital_detail_view(request, pk): # change here
        hospital = get_object_or_404(Hospital, pk=pk)  #oldone->pk='primary_key')
        return render(request, 'hospital_detail.html', {'hospital': hospital})

也在网址中尝试:

path('hospitals/<int:pk>', views.HospitalDetailView.as_view(), name='hospital_detail')

即使这不起作用,请确保您在视图中收到pk值,我认为这是唯一的原因。尝试在url中打印pk值,以确保您正确接收它。


0
投票

通用视图是为“不要重复自己”而构建的,请尝试下面的代码。

url

path('hospitals/<int:pk>/', views.HospitalDetailView.as_view(), name='hospital_detail')

view

class HospitalDetailView(generic.DetailView):
    model = Hospital
    template_name = "hospital_detail.html"

In browser url exmaple i.e pk=2

http://localhost:8000/hospitals/2/

0
投票

在views.py中,

class HospitalDetailView(generic.DetailView):
    model = Hospital
    template_name = 'hospital_detail.html'

在模板中

{% extends "base_generic.html" %}

{% block content %}
  <h1>Hospital List</h1>
  <ul>
     {% for hospital in hospital_list %}
     <li>
         <a href="{% url 'hospital_detail' hospital.pk %}">{{ hospital.name }}</a> 
         ({{hospital.location_text}})
     </li>
  </ul>
     {% empty %}
          <p>There are no hospitals listed in your area.</p>
     {% endfor %}
{% endblock %}

在urls.py中,

path('hospitals/<int:pk>/', views.HospitalDetailView.as_view(), name='hospital_detail')

这将解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.