Závěr: Nakonec jsem se příliš bál toho `os.getcwd()` a udělal jsem si tuto 
funkci:
```
import inspect
import os
from pathlib import Path

def get_project_root():
    for prg in inspect.stack()[::-1]:
        prg = prg.filename
        if '/wsgi.py' in prg or '/asgi.py' in prg:
            return Path(prg).parent.parent
        elif '/manage.py' in prg:
            return Path(prg).parent
    else:
        return Path(os.getcwd())

BASE_DIR = get_project_root()
PROJECT_NAME = BASE_DIR.name   # to make some settings portable 
(DATABASES=..)
PROJECT_DIR = BASE_DIR / PROJECT_NAME
```

Dne pondělí 22. února 2021 v 15:18:01 UTC+1 uživatel MirekZv napsal:

> @Honza, @starenka
>
> Ahoj chlapi, především díky za vlídné a věcné odpovědi, čekal jsem spíš, 
> že po této otázce už na mě někdo vlítne a pěkně mi vynadá.
>
> Jo, máte přesně pravdu, bylo by to asi lepší (získat to v umístění 
> projektu a předat to nějakým parametrem), než účelu nepřiměřené úsilí, co 
> se s tím snažím dělat.
>
> Přidám nějakou story, jak jsem se do té situace dostal, snad z toho bude 
> něco jasnější, i když osobně jsem nad svým postupem dost na rozpacích:
>
> 1. Nejdřív jsem copy/pastoval ze starého projektu pro vytvoření nového, 
> jak se to asi běžně dělá.
> 2. Pak jsem začal myslet na nějaký reuse, tak jsem si udělal jednu django 
> aplikaci na věci, které by asi byly potřebné ve 2+ projektech.
> 3. Pak mě začalo štvát, že tu aplikaci mám pod jednotlivými projekty, 
> takže když ji někde změním, neměl bych zapomenout jít i do těch ostatních 
> projektů a udělat v ní stejné změny i tam.
> 4. Pak jsem tu django aplikaci obecností odkopíroval do adresáře mimo, 
> udělal jí vlastní git repozitář, a instaluji ji nějak jako `poetry add 
> ../../obecna`
> 5. Pak mě začalo štvát, že běžná django settings mají tak 200 řádek kódu, 
> stejně jsou vždycky skoro stejná, a když tam něco vylepším, tak zas abych 
> šel po projektech a implementoval vylepšení i do ostatních (a nebo v tom 
> měl chaos).
> 6. Pak jsem si zkusil jakési django-split-settings, rozdělil ten mega-file 
> na 10 malých (vypadá to dobře, ale o vhodnosti tohoto mám velké pochyby, 
> protože to už jsme možná trochu u zacházení s jmennými prostory jako ve 
> Web2py).
> 7. Pak jsem většinu nastavení přepsal tak, aby byla obecná, bez závislostí 
> na projektu. Příklad: Nemám důvod, proč by se moje postgres databáze neměla 
> jmenovat stejně jako projekt. Tak proč psát do nastavení natvrdo jméno 
> databáze? - toto je další věc, kterou na Djangu nemám rád, že když dělá 
> startproject, tak rozkopíruje po x souborech na y míst jméno projektu jako 
> string.
> 8. Pak jsem (ze stejných důvodů jako výše) to odsunul mimo ty mé projekty.
>
> Takže: mohl bych si to nastavit v projektech a předat jako parametr. Ale 
> čím míň toho zůstane customizovaného pro projekty, tím lépe.
> Navíc to django-split-settings se volá pomocí jakýchsi funkcí include() a 
> optional() a nejsem si tak úplně jistý, jak snadno tam jdou parametry 
> předávat.
>
> Dne pondělí 22. února 2021 v 14:58:03 UTC+1 uživatel MirekZv napsal:
>
>> @John
>>
>> Jo, zase jsem horlivější než je vhodné.
>> Nemyslel jsem to tak, že já sám chci mít na stagingu/produkci/.. různá 
>> prostředí.
>> Myslel jsem to tak, že kdyby se to někdy z nějakých nyní neznámých důvodů 
>> ocitlo pod jiným prostředím (např. na různých cloudech), aby to chodilo.
>> Čili přehnaná snaha o obecnost, která se nakonec skoro vždycky spíš 
>> vymstí.
>>
>> Jinak vyvíjím i nasazuji na poslední Debian, takže vlastně skoro 
>> identické prostředí na vývoji i produkci.
>> Díky tedy za doporučení dockeru, já už jsem si s ním kdysi pohrával, ale 
>> zjistil jsem, že pro laika to zas tak ultrasnadné není,
>> pak se mi zdá, že to docela žere místo na disku (zvlášť když tam 
>> zapomeneš něco nesmazaného z předchozích pokusů), což při nasazování na 
>> (cizí=veřejný) virtuální server je dost zásadní,
>> a pak, když to jedu vše na Debianu, tak by ten přínos zas tak zásadní 
>> nebyl.
>> Takže Docker je zatím odložen.
>>
>> Dne pátek 19. února 2021 v 22:59:35 UTC+1 uživatel starenka napsal:
>>
>>> A kdyz to teda volas z toho prokektu, proc to ty fci v tom modulu 
>>> nepredas jako arg? 
>>>
>>>
>>> On Fri, Feb 19, 2021, 22:51 Jan Bednařík <jan.be...@gmail.com> wrote:
>>>
>>>> A nemůžeš mít název toho projektu jako konstantu přímo v settings? 
>>>> Zjišťovat to z názvu adresáře mi přijde příliš křehké.
>>>>
>>>> A Sites znáš? to je takovej dobrej způsob, jak pracovat s více projekty 
>>>> / instalacemi / weby v jedné code base: 
>>>> https://docs.djangoproject.com/en/3.1/ref/contrib/sites/
>>>>
>>>> Honza
>>>>
>>>> pá 19. 2. 2021 v 19:50 odesílatel Jan Walter <jnw...@gmail.com> napsal:
>>>>
>>>>> Asi nejsem sto se přesně naladit na charakter Tvého problému, ale 
>>>>> pokud mohu poradit obecně, snažil bych se vystříhat tomu, aby "bylo na 
>>>>> produkci pokaždé něco jinak".
>>>>>
>>>>> My v partě máme oblíbený docker, což je technologie využitelná např. 
>>>>> na to, aby bylo, pokud možno, "všude všechno v základu stejně". 
>>>>> Doporučuji 
>>>>> Tvé pozornosti.
>>>>>
>>>>> John
>>>>>
>>>>> On Fri, 19 Feb 2021, 19:32 MirekZv, <mirek....@gmail.com> wrote:
>>>>>
>>>>>> Běží mi kód ve stacku projektu,
>>>>>> ale dotyčný soubor se nachází mimo adresář projektu.
>>>>>> Jak bych zjistil jméno projektu?
>>>>>>
>>>>>> Abych to trochu vysvětlil:
>>>>>> V běžných django settings se řeší přesně toto, co potřebuju, třeba 
>>>>>> nějak přibližně takto:
>>>>>> BASE_DIR = Path(__file__).resolve().parent.parent
>>>>>> PROJECT_NAME = BASE_DIR.name
>>>>>>
>>>>>> Potřebuju totéž zjistit v souboru, který není v BASE_DIR.
>>>>>> A to tak, že nechci nic nastavovat nikde v souborech pod BASE_DIR.
>>>>>>
>>>>>> Napadají mě 2 možnosti:
>>>>>> - zjistit to nějak z inspect.stack() --ale nevím, jak to udělat dost 
>>>>>> bezpečně
>>>>>> - vzít jenom os.getcwd() --za předpokladu, že mám úplně standardní 
>>>>>> projekt, se stejným jménem rootu i adresáře projektu
>>>>>>
>>>>>> Zatím jsem se spokojil s tím posledním.
>>>>>> Myslíte, že by na to mohl být spoleh ve všech variantách na produkci?
>>>>>>
>>>>>> Alternativně: Dá se nějak snadno zjistit z kódu settings file 
>>>>>> (protože ten mám pod projektem; nebo prostě jakýkoli file, který je 
>>>>>> bezpečně pod adresářem projektu (např. ve stacku mám jako první 
>>>>>> manage.py, 
>>>>>> jenže to asi na produkci bude pokaždé jinak).
>>>>>>
>>>>>> Díky, tedy kdyby někdo věděl.
>>>>>>
>>>>>> -- 
>>>>>> -- 
>>>>>> E-mailová skupina djan...@googlegroups.com
>>>>>> Správa: http://groups.google.cz/group/django-cs
>>>>>> --- 
>>>>>> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny 
>>>>>> „django-cs“ ve Skupinách Google.
>>>>>> Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, 
>>>>>> zašlete e-mail na adresu django-cs+...@googlegroups.com.
>>>>>> Chcete-li tuto diskusi zobrazit na webu, navštivte 
>>>>>> https://groups.google.com/d/msgid/django-cs/2c569772-cc17-437d-80ec-0411a0207c33n%40googlegroups.com
>>>>>>  
>>>>>> <https://groups.google.com/d/msgid/django-cs/2c569772-cc17-437d-80ec-0411a0207c33n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>> -- 
>>>>> -- 
>>>>> E-mailová skupina djan...@googlegroups.com
>>>>> Správa: http://groups.google.cz/group/django-cs
>>>>> --- 
>>>>> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny 
>>>>> „django-cs“ ve Skupinách Google.
>>>>> Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, 
>>>>> zašlete e-mail na adresu django-cs+...@googlegroups.com.
>>>>> Chcete-li tuto diskusi zobrazit na webu, navštivte 
>>>>> https://groups.google.com/d/msgid/django-cs/CAK-vJU%3D6zQW99QbNdrXSC7jGxNVxEB7y39M%2BDYUi%3DJQMG_MwLA%40mail.gmail.com
>>>>>  
>>>>> <https://groups.google.com/d/msgid/django-cs/CAK-vJU%3D6zQW99QbNdrXSC7jGxNVxEB7y39M%2BDYUi%3DJQMG_MwLA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>> -- 
>>>> -- 
>>>> E-mailová skupina djan...@googlegroups.com
>>>> Správa: http://groups.google.cz/group/django-cs
>>>> --- 
>>>> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny 
>>>> „django-cs“ ve Skupinách Google.
>>>> Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, 
>>>> zašlete e-mail na adresu django-cs+...@googlegroups.com.
>>>>
>>> Chcete-li tuto diskusi zobrazit na webu, navštivte 
>>>> https://groups.google.com/d/msgid/django-cs/CAMmgUkNE8pvmhtkfV2VaN_cmzdB1WytZSMev-tbW9KyuBbOEog%40mail.gmail.com
>>>>  
>>>> <https://groups.google.com/d/msgid/django-cs/CAMmgUkNE8pvmhtkfV2VaN_cmzdB1WytZSMev-tbW9KyuBbOEog%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>

-- 
-- 
E-mailová skupina django-cs@googlegroups.com
Správa: http://groups.google.cz/group/django-cs
--- 
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny django-cs 
ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete 
e-mail na adresu django-cs+unsubscr...@googlegroups.com.
Chcete-li zobrazit tuto diskusi na webu, navštivte 
https://groups.google.com/d/msgid/django-cs/c00991f9-4c8c-49af-8b48-0a5a09865b68n%40googlegroups.com.

Reply via email to