My detail View in Django, isn't successfully displaying the content selected from the listviews. The following is my code.
Model:
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Post_Model(models.Model):
Title = models.CharField(max_length=50)
Author = models.ForeignKey(User, on_delete=models.CASCADE)
Body = models.TextField()
def __str__(Self):
return Self.Title ' | ' str(Self.Author)
urls:
from django.urls import path
from .views import Article_details, Home_page
urlpatterns = [
path('', Home_page.as_view(), name="Home"),
path('Article/<int:pk>/', Article_details.as_view(), name="Article"),
Views:
from django.shortcuts import render
from django.views.generic import ListView, DetailView
from . models import Post_Model
class Home_page(ListView):
model = Post_Model
template_name = 'June11App/Home.html'
class Article_details(DetailView):
model = Post_Model
template_name = 'June11App/Article.html'
HTML LIST VIEW:
<h1>Home Page</h1>
<ul>
{% for Post in object_list %}
<li>
<a href="{% url 'Article' Post.pk %}">
{{Post.Title}}
</a>
- {{Post.Author}}<br>
{{Post.Body}}
</li>
<br>
{% endfor %}
</ul>
HTML DETAIL VIEW:
<h1>Article Page</h1><br>
{{Post.Author}}
{{Post.Body}}
I hope my query made sense. I don't receive any error on myside, its just not working as it should.
CodePudding user response:
The object data is passed as object
and post_model
, not Post
, so:
<h1>Article Page</h1><br>
{{ object.Author }}
{{ object.Body }}
Note: Models normally have no
…Model
suffix. Therefore it might be better to renametoPost_Model
Post
.
Note: It is normally better to make use of the
settings.AUTH_USER_MODEL
[Django-doc] to refer to the user model, than to use theUser
model [Django-doc] directly. For more information you can see the referencing theUser
model section of the documentation.
Note: normally the name of the fields in a Django model are written in snake_case, not PascalCase, so it should be:
author
instead of.Author