Удаление ссылок URLS.PY и VIEWS.PY

Я попытался сформулировать это конкретно, но дилемма заключается в следующем: Изображение не загружается при добавлении slug на детальной странице, но прекрасно загружается в index.html.enter image description here

post.image - это код, который вы должны искать... работает в index.html, но не в post_detail... Что-то не так в view/urls... пробовал много комбинаций, но все еще не могу разобраться в хитросплетениях шаблонов url. Мне нужно, чтобы изображение в детали указывало на http://127.0.0.1:8000/static/placeholder_cake.PNG, а не 'http://127.0.0.1:8000/carrot-cake/static/placeholder_cake.PNG (в основном без slug)...

Спасибо всем, кто помогает!

index.html

            <div class="col-md-8 mt-3 left">
                {% for post in post_list %}
                    <div class="card mb-4">
                    <div class="card-body">
                        <img class="card-img-top" src="{{ post.image }}" alt="Card image cap">
                        <h2 class="card-title">{{ post.title }}</h2>
                        <p class="card-text text-muted h6">{{ post.author }} | {{ post.created_on}} </p>
                        <p class="card-text">{{post.content|slice:":200" }}</p>
                        <a href="{% url 'post_detail' post.slug %}" class="btn btn-primary">Read More &rarr;</a>
                    </div>
                    </div>
                {% endfor %}
            </div>

post_detail.html

            {% extends 'base.html' %} {% block content %}
            <!-- {% load static %} -->

            <div class="container">
                <div class="row">
                <div class="col-md-8 card mb-4  mt-3 left  top">
                <div class="card-body">
                    <h1>{% block title %} {{ objest.title }} {% endblock title %}</h1>
                    <p class=" text-muted">{{ post.author }} | {{ post.created_on }}</p>

                    <!-- /carrot-cake/static/placeholder_cake -->

                    <img class="card-img-top" src="{{ post.image }}" alt="Card image cap">
                    <p class="card-text "><pre class="recipe">{{ object.content | safe }}</pre></p>
                </div>
                </div>

                {% block sidebar %} {% include 'sidebar.html' %} {% endblock sidebar %}
                </div>
            </div>

            {% endblock content %}

models.py

            class Post(models.Model):
                title = models.CharField(max_length=200, unique=True)
                slug = models.SlugField(max_length=200, unique=True)
                author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='blog_posts')
                updated_on = models.DateTimeField(auto_now= True)
                content = models.TextField()
                created_on = models.DateTimeField(auto_now_add=True)
                status = models.IntegerField(choices=STATUS, default=0)
                image = models.ImageField(upload_to='static', null=True, blank=True)   #creates folder called amiibo under the main media folder and uploads there

                class Meta:
                    ordering = ['-created_on']

                def __str__(self):
                    return self.title

views.py

                class PostList(generic.ListView):
                    queryset = Post.objects.filter(status=1).order_by('-created_on')
                    template_name = 'index.html'

                class PostDetail(generic.DetailView):
                    model = Post
                    template_name = 'post_detail.html'

urls.py

                urlpatterns = [
                    path('', views.PostList.as_view(), name='home'),
                    path('<slug:slug>/', views.PostDetail.as_view(), name='post_detail'),
                ]

Объекты контекста, на которые вы ссылаетесь в шаблоне детализации, немного перепутаны.

Вы используете общий DetailView, который по умолчанию добавляет конкретный объект в контекст как object. Но вы пытаетесь ссылаться на него и как на объект, и как на пост. Поэтому постарайтесь сохранить его в виде object;

            {% extends 'base.html' %} {% block content %}
            <!-- {% load static %} -->

            <div class="container">
                <div class="row">
                <div class="col-md-8 card mb-4  mt-3 left  top">
                <div class="card-body">
                    <h1>{% block title %} {{ object.title }} {% endblock title %}</h1>
                    <p class=" text-muted">{{ object.author }} | {{ object.created_on }}</p>

                    <!-- /carrot-cake/static/placeholder_cake -->

                    <img class="card-img-top" src="{{ object.image }}" alt="Card image cap">
                    <p class="card-text "><pre class="recipe">{{ object.content|safe }}</pre></p>
                </div>
                </div>

                {% block sidebar %} {% include 'sidebar.html' %} {% endblock sidebar %}
                </div>
            </div>

            {% endblock content %}

Вы также ссылались на статический путь в своих примерах URL. Если вы загружаете что-то в поле в созданной вами модели, это не будет использовать ваш статический путь. Вместо него будут использоваться ваши медиа настройки.

Статические файлы включают css/javascript/изображения и т.д., а медиафайлы - это загружаемый пользователем контент.

И я только что заметил, что вы используете фильтр safe. При использовании фильтров пробел не нужен.

Эта одна строка исправила то, что я пытался сделать:

<img class="card-img-top" src= "{% url 'home' %}{{ post.image }}" alt="Card image cap">

По сути, используется та же ссылка, что и в первом представлении/шаблоне (index), но из второго представления... (post_detail)

Вернуться на верх