我最近问了一个有关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 %}
已解决:感谢大家的帮助。我不知道怎么了我做了几件事,它解决了。
此问题已解决。任何有助于理解为什么很棒的帮助吗?
答案 0 :(得分: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值,我认为这是唯一的原因。尝试在网址中打印pk值以知道您正确接收了它。
答案 1 :(得分:0)
通用视图是为“不要重复自己”而构建的,请尝试下面的代码。
path('hospitals/<int:pk>/', views.HospitalDetailView.as_view(), name='hospital_detail')
class HospitalDetailView(generic.DetailView):
model = Hospital
template_name = "hospital_detail.html"
http://localhost:8000/hospitals/2/
答案 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')
这将解决您的问题。