Q&A

책을 따라하다가 막히는 부분이 있나요?
질문을 남겨주세요.

안녕하세요.. 저 좀 도와주세요..

2 years, 8 months ago

id746011 id746011
from django.views.generic import ListView, DetailView
from .models import Post
class PostList(ListView):
model = Post
ordering = '-pk'

class PostDetail(DetailView):
model = Post

def index(request):
posts = Post.objects.all().order_by('-pk')

return render(
request,
'blog/index.html',
{
'posts': posts,
}
)

def single_post_page(request,pk):
post = Post.objects.get(pk=pk)

return render(
request,
'blog/single_post_page.html',
{
'post': post,
}
)

views.py 


from django.test import TestCase, Client
from bs4 import BeautifulSoup
from .models import Post


class TestView(TestCase):
def setUp(self):
self.client = Client()

def test_post_detail(self):
# 0.Post가 하나 있다.
post_001 = Post.objects.create(
title='첫번째 포스트입니다.',
content='Hello World. We are the world.',

)
# 1.1 그 포스트의 url 'blog/1/' 이다.
self.assertEqual(post_001.get_absolute_url(), '/blog/1/')

# 1. 첫 번째 post detail 페이지 테스트
# 1.2 첫 번째 post url로 접근하면 정상적으로 작동한다. (status code: 200)
response = self.client.get(post_001.get_absolute_url())
self.assertEqual(response.status_code, 200)
soup = BeautifulSoup(response.content, 'html.parser')

# 1.3 post_list 페이지와 똑같은 네비게이션 바가 있다.
navbar = soup.nav # beautifulsoup를 이용하면 간단히 페이지의 태그 요소에 접근이 가능합니다.
self.assertIn('Blog', navbar.text)
self.assertIn('About Me', navbar.text)

# 1.4 첫 번째 post title이 브라우저 탭에 표기되는 페이지 title에 있다.
self.assertIn(post_001.title, soup.title.text)

# 1.5 첫 번째 post title post-area에 있다.
main_area = soup.find('div', id='main-area')
post_area = main_area.find('div', id='post-area')
self.assertIn(post_001.title, post_area.text)

# 1.6 첫 번째 post의 작성자(author) post-area에 있다.
# 아직 작성 불가

# 1.7 첫 번째 post content post-area에 있다.
self.assertIn(post_001.content, post_area.text)

tests.py


{% extends 'blog/base.html'%}

{% block head_title %}
    {{ post.title }} - Blog
{% endblock %}


{% block main_area %}
    <div id="post-area">
        <!-- Title -->
        <h1 class="mt-4">{{ post.title }}</h1>
        <h5 class="text-muted">{{ post.hook_text }}</h5>

        <!-- Author -->
        <p class="lead">
          by
          <a href="#">작성자명 쓸 위치(개발예정)</a>
        </p>

        <hr>

        <!-- Date/Time -->
        <p>Posted on {{ post.created_at }}</p>

        <hr>

        <!-- Preview Image -->
        {% if post.head_image %}
        <img class="img-fluid rounded" src="{{ post.head_image.url }}" alt="{{ post.title }} head_image">
    {% else %}
        <img class="img-fluid rounded" src="https://picsum.photos/seed/{{ post.id }}/800/200" alt="random_image">
    {% endif %}


    <hr>

        <!-- Post Content -->
        <p>{{ post.content }}</p>

        {% if post.file_upload %}
            <a href="{{ post.file_upload.url }}" class="btn btn-outline-dark" role="button" download>
                Download:

                {% if post.get_file_ext == 'csv' %}
                    <i class="fas fa-file-csv"></i>
                {% elif post.get_file_ext == 'xlsx' or post.get_file_ext == 'xls' %}
                    <i class="fas fa-file-excel"></i>
                {% elif post.get_file_ext == 'docx' or post.get_file_ext == 'doc' %}
                    <i class="fas fa-file-word"></i>
                {% else %}
                    <i class="far fa-file"></i>
                {% endif %}

                {{ post.get_file_name }}
            </a>
        {% endif %}

        <hr>
          </div>

          <div id="comment-area">
        <!-- Comments Form -->
        <div class="card my-4">
          <h5 class="card-header">Leave a Comment:</h5>
          <div class="card-body">
            <form>
              <div class="form-group">
                <textarea class="form-control" rows="3"></textarea>
              </div>
              <button type="submit" class="btn btn-primary">Submit</button>
            </form>
          </div>
        </div>

        <!-- Single Comment -->
        <div class="media mb-4">
          <img class="d-flex mr-3 rounded-circle" src="http://placehold.it/50x50" alt="">
          <div class="media-body">
            <h5 class="mt-0">Commenter Name</h5>
            Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
          </div>
        </div>

        <!-- Comment with nested comments -->
        <div class="media mb-4">
          <img class="d-flex mr-3 rounded-circle" src="http://placehold.it/50x50" alt="">
          <div class="media-body">
            <h5 class="mt-0">Commenter Name</h5>
            Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.

            <div class="media mt-4">
              <img class="d-flex mr-3 rounded-circle" src="http://placehold.it/50x50" alt="">
              <div class="media-body">
                <h5 class="mt-0">Commenter Name</h5>
                Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
              </div>
            </div>

            <div class="media mt-4">
              <img class="d-flex mr-3 rounded-circle" src="http://placehold.it/50x50" alt="">
              <div class="media-body">
                <h5 class="mt-0">Commenter Name</h5>
                Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
              </div>
            </div>
           
          </div>
        </div>
      </div>
{% endblock %}


post_detail파일입니다.. (저번 navbar.text에 질문을 드렸는데 뭐가 문제지 정확히 알려 주실 수 있나요..?)


C:\github\website-practice\mysite(main -> origin)

(venv) λ python manage.py runserver

Watching for file changes with StatReloader

Performing system checks...


System check identified no issues (0 silenced).

March 29, 2022 - 13:36:16

Django version 4.0.3, using settings 'mysite.settings'

Starting development server at http://127.0.0.1:8000/

Quit the server with CTRL-BREAK.

Exception in thread django-main-thread:

Traceback (most recent call last):

  File "C:\github\website-practice\venv\lib\site-packages\django\core\servers\basehttp.py", line 47, in get_internal_wsgi_application

    return import_string(app_path)

  File "C:\github\website-practice\venv\lib\site-packages\django\utils\module_loading.py", line 30, in import_string

    return cached_import(module_path, class_name)

  File "C:\github\website-practice\venv\lib\site-packages\django\utils\module_loading.py", line 15, in cached_import

    import_module(module_path)

  File "C:\Users\LG\AppData\Local\Programs\Python\Python39\lib\importlib\__init__.py", line 127, in import_module

    return _bootstrap._gcd_import(name[level:], package, level)

  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import

  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load

  File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked

ModuleNotFoundError: No module named 'mysite.wsgi'


The above exception was the direct cause of the following exception:


Traceback (most recent call last):

  File "C:\Users\LG\AppData\Local\Programs\Python\Python39\lib\threading.py", line 973, in _bootstrap_inner

    self.run()

  File "C:\Users\LG\AppData\Local\Programs\Python\Python39\lib\threading.py", line 910, in run

    self._target(*self._args, **self._kwargs)

  File "C:\github\website-practice\venv\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper

    fn(*args, **kwargs)

  File "C:\github\website-practice\venv\lib\site-packages\django\core\management\commands\runserver.py", line 157, in inner_run

    handler = self.get_handler(*args, **options)

  File "C:\github\website-practice\venv\lib\site-packages\django\contrib\staticfiles\management\commands\runserver.py", line 31, in get_handler

    handler = super().get_handler(*args, **options)

  File "C:\github\website-practice\venv\lib\site-packages\django\core\management\commands\runserver.py", line 78, in get_handler

    return get_internal_wsgi_application()

  File "C:\github\website-practice\venv\lib\site-packages\django\core\servers\basehttp.py", line 49, in get_internal_wsgi_application

    raise ImproperlyConfigured(

django.core.exceptions.ImproperlyConfigured: WSGI application 'mysite.wsgi.application' could not be loaded; Error importing module.




"""
WSGI config for mysite project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/4.0/howto/deployment/wsgi/
"""

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')

application = get_wsgi_application()

그리고 wsgi에서 오류가 뜹니다.. 파일도 맞는 위치에 있고.. 코드도 수정한 적이 없는데 뭐가 문제인지 아시나요...?

from django.db import models


class Post:
pass

그리고 models.py 이 부분 수정하다가 pycharm show quick fixes 기능으로 수정하니까 from django.db import models 밑에 저 코드가 생겼는데 이건 그냥 놔둬도 되나요..?


sungyong
sungyong   2 years, 7 months ago

어디서부터 엄청 꼬이기 시작한 것 같은데요. 

일단 asgi.py와 wsgi.py가 왜 프로젝트 폴더에 있는지 모르겠습니다. 

애초에 django-admin startproject mysite . 으로 프로젝트를 시작했는지 궁금합니다. 지금 프로젝트 폴더가 있고, 그 아래 프로젝트 파일이 또 있는 것 같아보이거든요. 

가능하시다면 프로젝트 리포지토리를 공유해주시겠어요? 

Updated: March 30, 2022, 10:52 p.m.

id746011
id746011   2 years, 7 months ago

깃허브 프로젝트 리포지토리 공유하는 방법 좀 알려주세요..  어떻게 하나요..?

Updated: March 31, 2022, 2:42 p.m.

sungyong
sungyong   2 years, 7 months ago

https://afsdzvcx123.tistory.com/entry/%EA%B9%83%ED%97%88%EB%B8%8C-GitHub-%EA%B9%83%ED%97%88%EB%B8%8C-Collaborator-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0


참고하세요. 

그런데 애초에 프로젝트 생성 단계부터 뭔가 꼬인 것 같은데요..

Updated: March 31, 2022, 9:57 p.m.

Leave a Comment:
목록보기
Search
  • 자유게시판
  • Q&A