2016-06-18 10 views
10

Dokumenty aplikacji do wielokrotnego użytku (https://docs.djangoproject.com/en/1.9/intro/reusable-apps/) wskazują, aby wyświetlić szablon i pliki statyczne w numerze MANIFEST.in, ale nie wygląda na to, że w ogóle wygląda on w tym pliku.Jak utworzyć koło z aplikacji django?

Widziałem odniesień do data_files ale te pliki iść w katalogach w stosunku do instalacji Pythona (sys.prefix), a nie pakiet instalacyjny (a nie jest równomiernie sys.prefix związane site-packages między systemami).

mam rację zakładając, że myapp/templates/myapp/foo.html powinna zakończyć się w .../site-packages/myapp/templates/myapp/foo.html i podobnie dla plików statycznych, a użytkownik musi uruchomić manage.py collectstatic po pip install myapp?

Update (przykład):

następującą strukturę:

(build2) go|c:\srv\tmp\myapp> tree 
. 
|-- MANIFEST.in 
|-- myapp 
| |-- static 
| | `-- myapp 
| |  `-- foo.css 
| |-- templates 
| | `-- myapp 
| |  `-- foo.html 
| |-- urls.py 
| `-- views.py 
`-- setup.py 

5 directories, 6 files 

setup.py

import setuptools 
from distutils.core import setup 
setup(
    name='myapp', 
    version='0.1.0', 
    packages=['myapp'] 
) 

MANIFEST.in

recursive-include myapp/templates * 
recursive-include myapp/static * 

działa python setup.py sdist i python setup.py bdist_wheel tworzy następujące pliki bin myapp/dist:

2016-06-18 13:47    2,073 myapp-0.1.0-py2-none-any.whl 
2016-06-18 13:46    2,493 myapp-0.1.0.zip 

jeśli spojrzeć wewnątrz pliku .zip, znajdziesz szablony i foldery statycznych, jeśli zmienić nazwę pliku .whl na .zip i nią patrzeć , katalogi nie są uwzględnione.

Update 2 (roztwór):

Zmiana pliku MANIFEST.in do

recursive-include myapp * 

i setup.py do

from setuptools import find_packages, setup 
setup(
    name='myapp', 
    version='0.1.0', 
    include_package_data=True, 
    packages=['myapp'], 
    zip_safe=False, 
) 

następnie uruchomiony python setup.py bdist_wheel utworzy plik .whl który instaluje myapp/templates i myapp/static w oczekiwanych miejscach.

+0

Czy możesz pokazać MCSE swojego problemu? Co wypróbowałeś w 'MANIFEST.in' i' setup.py'? – zmo

+0

@zmo z pewnością. – thebjorn

+3

@thebjorn, szkoda bounty, ale prawdopodobnie powinieneś odpowiedzieć na własne pytanie! – Doddie

Odpowiedz

1

Plik MANIFEST.in musi być zmienione na:

recursive-include myapp * 

Obejmuje to wszystko pod myapp/myapp z właściwych ścieżkach. W szczególności dotyczy to myapp/myapp/templates, która jest niezbędna.

Powyższa deklaracja obejmuje także myapp/myapp/static, co może być przydatne, jeśli po zainstalowaniu pliku .whl planowane jest uruchomienie wersji manage.py collectstatic.

W setup.py, funkcja setup musi zostać zaimportowana z setuptools (a nie distutils), tj.:

from setuptools import find_packages, setup 
setup(
    name='myapp', 
    version='0.1.0', 
    include_package_data=True, 
    packages=['myapp'], 
    zip_safe=False, 
) 

Kiedy teraz uruchomić python setup.py bdist_wheel będzie utworzyć plik .whl który instaluje myapp/templates i myapp/static w spodziewanych miejscach.