django 프로젝트 안에 앱을 만들고 클래스를 선언한뒤 content라는 TextFiel

 
Dokyoung Kim

django 프로젝트 안에 앱을 만들고 클래스를 선언한뒤 content라는 TextField 변수를 다음과 같이 선언하였습니다.
content = models.TextField(blank=True, null=True)
게시판의 글 내용을 저장하는 변수입니다.

템플릿 파일에서
{{ post.content|safe|linebreaks }}
와 같이 불러왔습니다.

safe 필터는 HTML을 글 내에서 사용하기 위해 사용하였고, linebreaks 필터는 줄바꿈 때문에 사용하였습니다.

그런데 띄어쓰기를 아무리 많이 해도 딱 한번만 인식되는 문제가 발생합니다. 무엇이 문제인가요? 제가 뭔가 초보적인걸 모르는것 같지만, 답변해 주시면 감사하겠습니다^^;

  • 남홍김

    http://stackoverflow.com/questions/721035/django-templates-stripping-spaces HTML 스펙 때문인거 같네요. 원하는 것을 구현한 방법도 있으니 한번 보셔요

    Chinseok Lee

    django linebreaks 의 구현에서는 \n 2개 이상을 하나의 구분문자열로해서 split 하기 때문입니다. 그럴경우 linebreaksbr 을 쓰시거나, 직접 구현하셔도 되겠네요. 아래 코드를 참고해보세요.

    linebreaks 의 구현 : \n 2개 이상을 단위로 split
    https://github.com/django/django/blob/1.9.8/django/utils/html.py#L126

    linebreaksbr 의 구현 : \n 1개 단위로 split
    https://github.com/django/django/blob/1.9.8/django/template/defaultfilters.py#L483

    남홍김

    이진석 줄바꿈이 아니라 띄어쓰기에 대해서 물으신거 아닌가요? 질문하신 분이 구분해서 표현하신거 같은데요. 음.

    Dokyoung Kim

    김남홍 (남홍김) 감사합니다. 다음과 같은 거의 비슷하지만 링크해 주신 페이지를 참고해서 저는 다음과 같이 해결했습니다. 앱 폴더 하위에 templatetags라는 폴더를 만들고 __init__.py를 추가한 다음 tags.py에 다음 코드를 입력했습니다.

    from django.template import Library
    from django.template.defaultfilters import stringfilter
    from django.utils.safestring import mark_safe, SafeData
    from django.utils.text import normalize_newlines
    from django.utils.html import escape

    register = Library()

    @stringfilter
    def keep_spacing(value, autoescape=None):
    autoescape = autoescape and not isinstance(value, SafeData)
    value = normalize_newlines(value)
    if autoescape:
    value = escape(value)
    value = mark_safe(value.replace(‘ ‘, ‘    ‘))
    value = mark_safe(value.replace(‘\t’, ‘        ‘))
    return mark_safe(value.replace(‘\n’, ‘
    ‘))
    register.filter(keep_spacing)

    답변 주신 다른 분들도 감사드립니다.

    Dokyoung Kim

    음 근데 여기도 스페이스가 안 먹는군요 ㅋㅋ

    남홍김

    여기라는건 페이스북 말인가요? ㅎㅎ

Advertisements

안녕하세요 처음 인사드립니다. 요즘 django에 매력에 빠져서 열심히 공부중에 있습니다.

 
Donghyuk Park

안녕하세요 처음 인사드립니다.
요즘 django에 매력에 빠져서 열심히 공부중에 있습니다.
django에서 django rest framework를 통해 api를 개발하려고 하는데,
json의 형태를 제가 원하는 대로 바꾸고 싶습니다.
아래가 현재의 모습입니다.
상단이 json array 형태로 들어가는거로 되어있습니다.
[
{
RECOMMEND_DATE: “2016-07-21”,
},
{
RECOMMEND_DATE: “2016-07-21”,
},
{
RECOMMEND_DATE: “2016-07-21”,
}
]

제가 원하는 모양은
{
code : 200,
recommen_list : [
{
RECOMMEND_DATE: “2016-07-21”,
},
{
RECOMMEND_DATE: “2016-07-21”,
},
{
RECOMMEND_DATE: “2016-07-21”,
}
]
}

상단이 jsonobject형태로 하여서 앞에 field명들도 붙이고 싶고 하네요~

이러한 방식으로 개발하신 내용을 못본거 같아서,
혹시 방법이나
어느부분을 좀 째려봐야하는지 좀알려주시면 감사드리겠습니다~

  • 이한영

    serializer를 만들 때 to_representation함수를 오버라이드해서 커스텀하시면됩니다

django를 활용해서 home iot 컨트롤을 구현해보려고 하고 있습니다. iot 디바이

 
SeeRyong Woo

django를 활용해서 home iot 컨트롤을 구현해보려고 하고 있습니다.
iot 디바이스에 로컬 ip가 할당되어 있는데 이걸 iot디바이스들에 접근하는 서버를 통해서 외부망에서 컨트롤 하려고 하는데
1. 디바이스마다 web서비스를 제공해줍니다.
2. 외부망에 연결된 서버에 django로 페이지를 보여줍니다.
3. django를 통해서 해당 디바이스에서 제공되는 web페이지를 보여줍니다.-> 이부분이 해결이 안됩니다. 로컬ip이기 때문에 외부에서 접근할수가 없으므로 서버에서 일종의 네트워크 브리지가 되어줘야 하는데 어떤식으로 해결해야할지 모르겠습니다. 단순히 로컬 ip를 물려주면 당연히 접근이 안되고 포트포워딩을 해서 해당포트로 연결하면 자동으로 기기를 등록할수가 없습니다. 해결 방법이 없을까요?
크롤링을 사용해서 해당페이지를 뿌려줄까 했지만 그럴경우 해당 디바이스를 컨트롤 할수가 없습니다.

  • SeeRyong Woo

    원격 데스크톱연결해서 로컬 ip로 접근하면 해당페이지가 보여지듯 서버의 웹페이지에서 로컬 페이지를 연결하고 싶습니다.

    Changkyum Kim

    우선 더 괜찮은 접근이라면, 디바이스들과 게이트웨이 서버는 별도의 데이터 채널로 통신하도록 구성하고 사용자 view는 모두 게이트웨이에서 생성하는 것이 어떨까요. 내부망 디바이스에도 django 인프라가 올라간다는 얘기이므로, 게이트웨이 서버와 디바이스간 json API같은 걸 설계하여 운용할 수 있겠네요. 이미 자동 등록 기능등을 구상하고 계시니 api설계가 있지 않을까 싶습니다만.

    굳이 디바이스가 html view를 산출해야겠다면 django가 됐든 다른 플랫폼이 됐든 어플리케이션 서버의 기능만으로 자동으로 될리는 없습니다. 게이트웨이 서버의 애플리케이션이 http 클라이언트 역할을 하며 내부망 디바이스에 리퀘스트하고 그 응답을 다시 외부로 릴레이하는 방식 외에 없지 않을까요.

    Changkyum Kim

    아니면 reverse proxy 역할을 할 별도의 인프라를 추가설치하여 구성.

    JiSeung Jung

    uPnP 를 사용하시면 포트포워딩 없이 해당 기기로 외부에서 접근이 가능 합니다

안녕 하세요 장고를 공부하고 있는 취준생입니다 다름이 아니라 제가 장고 책을 보고 실습중인

 
백승찬

안녕 하세요 장고를 공부하고 있는 취준생입니다
다름이 아니라 제가 장고 책을 보고 실습중인데 그대로 실습 하고 있는데 오류가 떠서 이렇게 질문 합니다

(myvenv) bsc@OXFORD:~/project/ch2$ python manage.py makemigrations
Traceback (most recent call last):
File “manage.py”, line 10, in
execute_from_command_line(sys.argv)
File “/home/bsc/project/myvenv/lib/python3.5/site-packages/django/core/management/__init__.py”, line 338, in execute_from_command_line
utility.execute()
File “/home/bsc/project/myvenv/lib/python3.5/site-packages/django/core/management/__init__.py”, line 312, in execute
django.setup()
File “/home/bsc/project/myvenv/lib/python3.5/site-packages/django/__init__.py”, line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File “/home/bsc/project/myvenv/lib/python3.5/site-packages/django/apps/registry.py”, line 85, in populate
app_config = AppConfig.create(entry)
File “/home/bsc/project/myvenv/lib/python3.5/site-packages/django/apps/config.py”, line 112, in create
mod = import_module(mod_path)
File “/usr/lib/python3.5/importlib/__init__.py”, line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File “”, line 986, in _gcd_import
File “”, line 969, in _find_and_load
File “”, line 956, in _find_and_load_unlocked
ImportError: No module named ‘bookmark.apps’

오류 내용입니다 어디를 확인하면 될까요
답변 부탁 드립니다

  • 공대영

    맨밑을 보면 ImportError 인데 어딘가 잘못 임포트한게 아닐까요?

    오재용

    settings.py 에 installed_apps 에 만드신 앱 추가하셨나요?

    백승찬

    추가 한 소스 사진 입니다

    공대영

    엥. 그냥 bookmark만 적어줘야하지 않나요?

    신영재

    애플리케이션 생성 시 apps.py는 장고 1.9부터 생길걸로 알고 있는데 어떤 책을 보는지는 모르겠지만 설치된 장고 버전도 확인해 보셔야 이후에도 문제 없이 실습해볼거 같네요

    Lee Persy Ji-Ho

    이 책 제가 다 소스 실행해봤는데 잘 되네요.

    Lee Persy Ji-Ho

    제가 소스 검수했으니 제게 관련 구조를 알려주시면 도움이 되어드릴 수 있을 듯.

django에서 static 파일 접근이 조금 이상해서 질문드립니다…ㅠㅠ 우선 모든

 
DongHyeok Lee

django에서 static 파일 접근이 조금 이상해서 질문드립니다…ㅠㅠ

우선 모든 static 파일들은 /static/에 모아두었습니다.
그리고 collectstatic으로 따로 모았습니다.

STATIC_URL = ‘/static/’
STATIC_ROOT = os.path.join(BASE_DIR, “collected_static/”)

STATICFILES_DIRS = (
os.path.join(BASE_DIR, “static”),
)

모든 html 첫 번째 줄에
{% load staticfiles %} 을 첨부했습니다.

그리고 첫 번째 app에서 js경로를
http://%%20static%20'dist/js/app.min.js'%20%
[실제 static/dist/js/app.min.js 로 되어있습니다.]
이런식으로 했을 때는 적용이 잘 되었습니다. (DEBUG=T/F 둘다)

그리고 두 번째 app에서 js경로를
http://%%20static%20'intro/js/scripts.js'%20%
[실제 static/intro/js/scripts.js 로 되어있습니다.]
그런데 두 번째 app의 HTML파일에서 계속 에러가 납니다…
(SyntaxError: Unexpected token ‘<') 라고요….

그리고 css파일을 불러오면,
Did not parse stylesheet at 'http;//127.0.0.1:8000/static/intro/content/smart/css/index.css' because non CSS MIME types are not allowed in strict mode.
이런식으로 뜨네용…ㅠㅠ
하앍 ㅠㅠ 두 번째 app에서는 갑작스럽게 적용이 안되니 당황스럽네요 ㅠㅠ

어떤 방식으로 해결할 수 있을까요?

  • DongHyeok Lee

    두 번째 app의 url로 접근할 때, DEBUG=True 일 때는 아주 잘 나옵니다. 그런데 False로 했을 때 전혀 나오질 않습니다….

    추가로 터미널 창에서 해당 static 에 대한 값들을 보면 200이라고 뜨네ㅇ요;;

    DongHyeok Lee

    또 urls.py에서
    from django.conf import settings
    from django.conf.urls.static import static

    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    이라고 했습니당…(왜 안되징 ㅠ)

    ps.이거는 상관없나용?

    DongHyeok Lee

    dㅏ…..해결했씁니다….(좀 어처구니 없네요;;;)

    1 )첫 번째 app와 두 번째 app 모두 동일한 templates폴더에 index.html이 들어있었네요….(왜 이게 문제가 되는지…?!)
    2)첫 번째 app의 index.html을 삭제하고 나니, 두 번째 app의 index.html가 아주 잘 나옵니다….

    (뭐가 문제였는지 조금 자세히 알려주실 분 계신가요?ㅠㅠ)

    권재원

    debug=true일때는 staticfiles_dirs를 장고가 알아서 잡아주죠(개발 편의 목적상). 하지만 debug=false로 하게 되면 static_root에서 가지고 오는데 이 부분이 collectstatic으로 모이는 곳입니다. 즉, collectstatic을 하게 되면 각 앱 또는 staticfiles_dirs에 있는 곳을 한 곳에 모아주게 됩니다. 이때 파일 명이 겹치면 override 되죠. 따라서 html 파일 명은 되도록이면 겹치면 안됩니다

안녕하세요, DRF로 Token authentication쪽 작업중에 질문드립니다 토큰인증

 
이한영

안녕하세요, DRF로 Token authentication쪽 작업중에 질문드립니다
토큰인증을 사용하면서 브라우저(또는 앱)에서 로그인을 유지하고 싶을 경우,

세션에 token값을 저장해놓고 유저정보를 가져오는게 맞을까요,
아니면 아이디/비밀번호를 저장해놓고(앱에서는 이렇게 처리했었습니다) 세션에 아이디/비밀번호가 있을 경우 로그인처리를 해서 토큰과 유저정보를 가져오는게 맞는건가요?
————
박영록 답변 감사합니다
로그인 후 토큰만 클라이언트에 저장하고 쓰는방법이 맞다고 하네요

  • Han Cold Kim

    아무래도 전자가 안전해보입니다.

    Enoch Lee

    세션에 token을 저장하고 세션에 토큰이 있을 경우, request header에 Authentication: Token 형식으로 지정하고 http요청을 보내면 로그인된 요청으로 간주됩니다

    박영록

    세션이라는 말이 서버 세션을 말하는 건 아니겠죠? 토큰을 클라이언트 어딘가에 저장해두고 그 토큰으로 http 요청을 보내는 것이 맞습니다. 앱에서도 패스워드를 로컬에 보관하는 건 좋지 않고 인증한 후에 패스워드는 버리고 토큰만 로컬에 저장해두면 됩니다.

FloatField 나 DecimalField 한번만 테스트해주실 수 있나요? class

 
오재용

FloatField 나 DecimalField 한번만 테스트해주실 수 있나요?
class A(models.Model):
test = models.FloatField()

이런 모델이 있을 때,

10.1
10.12
10.123

10.12345678901234 까지는 그대로 저장되지만,
10.123456789012345 를 저장하면
10.12345678901235 로 반올림 된 값이 저장됩니다.
DecimalField(max_digits=20, decimal_places=18) 필드를 이렇게 DecimalField로 바꿔서 저장해도 16번째 숫자에서 반올림되어 Decimal(‘10.123456789012350000’) 이렇게 저장됩니다.

a = A(test=10.123456789012345)
a.test 이렇게 하면 값이 잘 불려오지만 db에서 a를 가져와 test 필드 값을 불러내면 반올림 되는 값이 나오는 걸 보면 db에 저장되기 전에는 올바른 값을 갖고 있고 저장될 때 값이 반올림 되는 것 같습니다.

장고 다큐먼트에도 이에 대한 설명이 없고 검색해봐도 이에 대한 설명이 나오지 않는데… 혹시 이거 테스트 해주실 수 있나요? 아니면 이에 대해 설명해주실 수 있나요??

감사합니다.