[{"data":1,"prerenderedAt":6638},["ShallowReactive",2],{"navigation":3,"/development-environment/virtual-environments":1016,"/development-environment/virtual-environments-surround":6633},[4,54,89,123,165,211,253,331,389,439,462,488,514,540,578,624,650,672,702,736,774,800,850,856,862,868,874,928],{"title":5,"path":6,"stem":7,"children":8},"Introduction and Foundations","/introduction-and-foundations","01.introduction-and-foundations/01.index",[9,10,14,18,22,26,30,34,38,42,46,50],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"What is Django","/introduction-and-foundations/what-is-django","01.introduction-and-foundations/02.what-is-django",{"title":15,"path":16,"stem":17},"Key Concepts and Philosophy","/introduction-and-foundations/key-concepts-and-philosophy","01.introduction-and-foundations/03.key-concepts-and-philosophy",{"title":19,"path":20,"stem":21},"MVC vs MVT: Understanding Django's Architecture","/introduction-and-foundations/mvc-vs-mvt","01.introduction-and-foundations/04.mvc-vs-mvt",{"title":23,"path":24,"stem":25},"Project Structure Overview","/introduction-and-foundations/project-structure-overview","01.introduction-and-foundations/05.project-structure-overview",{"title":27,"path":28,"stem":29},"Installing Django","/introduction-and-foundations/installing-django","01.introduction-and-foundations/06.installing-django",{"title":31,"path":32,"stem":33},"Creating Your First Django Project","/introduction-and-foundations/creating-first-project","01.introduction-and-foundations/07.creating-first-project",{"title":35,"path":36,"stem":37},"Creating Your First Django App","/introduction-and-foundations/creating-first-app","01.introduction-and-foundations/08.creating-first-app",{"title":39,"path":40,"stem":41},"Your First Django \"Hello World\"","/introduction-and-foundations/hello-world","01.introduction-and-foundations/09.hello-world",{"title":43,"path":44,"stem":45},"Django Quick Start Guide","/introduction-and-foundations/quick-start-guide","01.introduction-and-foundations/10.quick-start-guide",{"title":47,"path":48,"stem":49},"How Django Handles Requests","/introduction-and-foundations/how-django-handles-requests","01.introduction-and-foundations/11.how-django-handles-requests",{"title":51,"path":52,"stem":53},"Django Settings","/introduction-and-foundations/django-settings","01.introduction-and-foundations/12.django-settings",{"title":55,"path":56,"stem":57,"children":58},"The Development Environment","/development-environment","02.development-environment/1.index",[59,61,65,69,73,77,81,85],{"title":60,"path":56,"stem":57},"Development Environment",{"title":62,"path":63,"stem":64},"Recommended Tooling for Django Development","/development-environment/recommended-tooling","02.development-environment/2.recommended-tooling",{"title":66,"path":67,"stem":68},"Virtual Environments","/development-environment/virtual-environments","02.development-environment/3.virtual-environments",{"title":70,"path":71,"stem":72},"Django Admin and Management Commands","/development-environment/admin-and-management-commands","02.development-environment/4.admin-and-management-commands",{"title":74,"path":75,"stem":76},"Django Project Settings","/development-environment/project-settings","02.development-environment/5.project-settings",{"title":78,"path":79,"stem":80},"Managing Django Environments: Local, Staging, and Production","/development-environment/environments-local-staging-production","02.development-environment/6.environments-local-staging-production",{"title":82,"path":83,"stem":84},"Running Django Development Server","/development-environment/running-development-server","02.development-environment/7.running-development-server",{"title":86,"path":87,"stem":88},"Working with Django Shell","/development-environment/working-with-shell","02.development-environment/8.working-with-shell",{"title":90,"path":91,"stem":92,"children":93},"Templates and Presentation Layer","/templates-and-presentation","03.templates-and-presentation/1.index",[94,95,99,103,107,111,115,119],{"title":90,"path":91,"stem":92},{"title":96,"path":97,"stem":98},"Introduction to Django Templates","/templates-and-presentation/introduction-to-templates","03.templates-and-presentation/2.introduction-to-templates",{"title":100,"path":101,"stem":102},"The Django Template Language","/templates-and-presentation/django-template-language","03.templates-and-presentation/3.django-template-language",{"title":104,"path":105,"stem":106},"Template Inheritance","/templates-and-presentation/template-inheritance","03.templates-and-presentation/4.template-inheritance",{"title":108,"path":109,"stem":110},"Built-in Template Tags and Filters","/templates-and-presentation/built-in-template-tags-and-filters","03.templates-and-presentation/5.built-in-template-tags-and-filters",{"title":112,"path":113,"stem":114},"Including Static Files","/templates-and-presentation/including-static-files","03.templates-and-presentation/6.including-static-files",{"title":116,"path":117,"stem":118},"Working with Media Files","/templates-and-presentation/working-with-media-files","03.templates-and-presentation/7.working-with-media-files",{"title":120,"path":121,"stem":122},"Using Alternative Template Engines","/templates-and-presentation/using-alternative-template-engines","03.templates-and-presentation/8.using-alternative-template-engines",{"title":124,"path":125,"stem":126,"children":127},"URLs and Views","/urls-and-views","04.urls-and-views/01.index",[128,129,133,137,141,145,149,153,157,161],{"title":124,"path":125,"stem":126},{"title":130,"path":131,"stem":132},"The URL Dispatcher","/urls-and-views/the-url-dispatcher","04.urls-and-views/02.the-url-dispatcher",{"title":134,"path":135,"stem":136},"Writing Function-Based Views","/urls-and-views/writing-function-based-views","04.urls-and-views/03.writing-function-based-views",{"title":138,"path":139,"stem":140},"View Decorators","/urls-and-views/view-decorators","04.urls-and-views/04.view-decorators",{"title":142,"path":143,"stem":144},"Rendering Responses","/urls-and-views/rendering-responses","04.urls-and-views/05.rendering-responses",{"title":146,"path":147,"stem":148},"Redirects","/urls-and-views/redirects","04.urls-and-views/06.redirects",{"title":150,"path":151,"stem":152},"Handling HTTP Methods","/urls-and-views/handling-http-methods","04.urls-and-views/07.handling-http-methods",{"title":154,"path":155,"stem":156},"Conditional View Processing","/urls-and-views/conditional-view-processing","04.urls-and-views/08.conditional-view-processing",{"title":158,"path":159,"stem":160},"File Uploads","/urls-and-views/file-uploads","04.urls-and-views/09.file-uploads",{"title":162,"path":163,"stem":164},"Using Django Shortcut Functions","/urls-and-views/using-django-shortcut-functions","04.urls-and-views/10.using-django-shortcut-functions",{"title":166,"path":167,"stem":168,"children":169},"Class Based Views","/class-based-views","05.class-based-views/01.index",[170,171,175,179,183,187,191,195,199,203,207],{"title":166,"path":167,"stem":168},{"title":172,"path":173,"stem":174},"Introduction to Class-Based Views","/class-based-views/introduction-to-class-based-views","05.class-based-views/02.introduction-to-class-based-views",{"title":176,"path":177,"stem":178},"Common Base Classes","/class-based-views/common-base-classes","05.class-based-views/03.common-base-classes",{"title":180,"path":181,"stem":182},"Built-in Generic Views","/class-based-views/built-in-generic-views","05.class-based-views/04.built-in-generic-views",{"title":184,"path":185,"stem":186},"Views for CRUD Operations","/class-based-views/views-for-crud-operations","05.class-based-views/05.views-for-crud-operations",{"title":188,"path":189,"stem":190},"Handling Forms with Class-Based Views","/class-based-views/handling-forms-with-class-based-views","05.class-based-views/06.handling-forms-with-class-based-views",{"title":192,"path":193,"stem":194},"Using Mixins","/class-based-views/using-mixins","05.class-based-views/07.using-mixins",{"title":196,"path":197,"stem":198},"URL Configuration with Class-Based Views","/class-based-views/url-configuration-with-class-based-views","05.class-based-views/08.url-configuration-with-class-based-views",{"title":200,"path":201,"stem":202},"Subclassing Generic Views","/class-based-views/subclassing-generic-views","05.class-based-views/09.subclassing-generic-views",{"title":204,"path":205,"stem":206},"Asynchronous Class-Based Views","/class-based-views/asynchronous-class-based-views","05.class-based-views/10.asynchronous-class-based-views",{"title":208,"path":209,"stem":210},"Pagination","/class-based-views/pagination","05.class-based-views/11.pagination",{"title":212,"path":213,"stem":214,"children":215},"Forms and User Input","/forms-and-user-input","06.forms-and-user-input/01.index",[216,217,221,225,229,233,237,241,245,249],{"title":212,"path":213,"stem":214},{"title":218,"path":219,"stem":220},"Understanding HTML Forms","/forms-and-user-input/understanding-html-forms","06.forms-and-user-input/02.understanding-html-forms",{"title":222,"path":223,"stem":224},"Django's Role in Form Handling","/forms-and-user-input/djangos-role-in-form-handling","06.forms-and-user-input/03.djangos-role-in-form-handling",{"title":226,"path":227,"stem":228},"Creating Forms with Forms API","/forms-and-user-input/creating-forms-with-forms-api","06.forms-and-user-input/04.creating-forms-with-forms-api",{"title":230,"path":231,"stem":232},"Form Validation","/forms-and-user-input/form-validation","06.forms-and-user-input/05.form-validation",{"title":234,"path":235,"stem":236},"Built-in Fields and Widgets","/forms-and-user-input/built-in-fields-and-widgets","06.forms-and-user-input/06.built-in-fields-and-widgets",{"title":238,"path":239,"stem":240},"Form Rendering in Templates","/forms-and-user-input/form-rendering-in-templates","06.forms-and-user-input/07.form-rendering-in-templates",{"title":242,"path":243,"stem":244},"Model Forms","/forms-and-user-input/model-forms","06.forms-and-user-input/08.model-forms",{"title":246,"path":247,"stem":248},"Advanced Form Techniques","/forms-and-user-input/advanced-form-techniques","06.forms-and-user-input/09.advanced-form-techniques",{"title":250,"path":251,"stem":252},"Security Considerations for Forms","/forms-and-user-input/security-considerations-for-forms","06.forms-and-user-input/10.security-considerations-for-forms",{"title":254,"path":255,"stem":256,"children":257},"Models and Databases","/models-and-databases","07.models-and-databases/01.index",[258,259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327],{"title":254,"path":255,"stem":256},{"title":260,"path":261,"stem":262},"Understanding Django Models","/models-and-databases/understanding-django-models","07.models-and-databases/02.understanding-django-models",{"title":264,"path":265,"stem":266},"Defining Fields","/models-and-databases/defining-fields","07.models-and-databases/03.defining-fields",{"title":268,"path":269,"stem":270},"Relationships and Foreign Keys","/models-and-databases/relationships-and-foreign-keys","07.models-and-databases/04.relationships-and-foreign-keys",{"title":272,"path":273,"stem":274},"Examples of Relationship Patterns","/models-and-databases/examples-of-relationship-patterns","07.models-and-databases/05.examples-of-relationship-patterns",{"title":276,"path":277,"stem":278},"Making Queries","/models-and-databases/making-queries","07.models-and-databases/06.making-queries",{"title":280,"path":281,"stem":282},"Filtering, Ordering, and Slicing","/models-and-databases/filtering-ordering-slicing","07.models-and-databases/07.filtering-ordering-slicing",{"title":284,"path":285,"stem":286},"Managers and QuerySets","/models-and-databases/managers-and-querysets","07.models-and-databases/08.managers-and-querysets",{"title":288,"path":289,"stem":290},"Aggregation","/models-and-databases/aggregation","07.models-and-databases/09.aggregation",{"title":292,"path":293,"stem":294},"Search","/models-and-databases/search","07.models-and-databases/10.search",{"title":296,"path":297,"stem":298},"Raw SQL Queries","/models-and-databases/raw-sql-queries","07.models-and-databases/11.raw-sql-queries",{"title":300,"path":301,"stem":302},"Transactions","/models-and-databases/transactions","07.models-and-databases/12.transactions",{"title":304,"path":305,"stem":306},"Multiple Databases","/models-and-databases/multiple-databases","07.models-and-databases/13.multiple-databases",{"title":308,"path":309,"stem":310},"Tablespaces","/models-and-databases/tablespaces","07.models-and-databases/14.tablespaces",{"title":312,"path":313,"stem":314},"Composite Primary Keys","/models-and-databases/composite-primary-keys","07.models-and-databases/15.composite-primary-keys",{"title":316,"path":317,"stem":318},"Database Instrumentation","/models-and-databases/database-instrumentation","07.models-and-databases/16.database-instrumentation",{"title":320,"path":321,"stem":322},"Database Optimization","/models-and-databases/database-optimization","07.models-and-databases/17.database-optimization",{"title":324,"path":325,"stem":326},"Fixtures","/models-and-databases/fixtures","07.models-and-databases/18.fixtures",{"title":328,"path":329,"stem":330},"Signals","/models-and-databases/signals","07.models-and-databases/19.signals",{"title":332,"path":333,"stem":334,"children":335},"Migrations","/migrations","08.migrations/01.index",[336,337,341,345,349,353,357,361,365,369,373,377,381,385],{"title":332,"path":333,"stem":334},{"title":338,"path":339,"stem":340},"How Migrations Work","/migrations/how-migrations-work","08.migrations/02.how-migrations-work",{"title":342,"path":343,"stem":344},"Management Commands","/migrations/management-commands","08.migrations/03.management-commands",{"title":346,"path":347,"stem":348},"Dependencies and Workflow","/migrations/dependencies-and-workflow","08.migrations/04.dependencies-and-workflow",{"title":350,"path":351,"stem":352},"Transaction Handling","/migrations/transaction-handling","08.migrations/05.transaction-handling",{"title":354,"path":355,"stem":356},"Adding Migrations to Apps","/migrations/adding-migrations-to-apps","08.migrations/06.adding-migrations-to-apps",{"title":358,"path":359,"stem":360},"Reversing Migrations","/migrations/reversing-migrations","08.migrations/07.reversing-migrations",{"title":362,"path":363,"stem":364},"Historical Models","/migrations/historical-models","08.migrations/08.historical-models",{"title":366,"path":367,"stem":368},"Considerations When Removing Fields","/migrations/considerations-when-removing-fields","08.migrations/09.considerations-when-removing-fields",{"title":370,"path":371,"stem":372},"Data Migrations","/migrations/data-migrations","08.migrations/10.data-migrations",{"title":374,"path":375,"stem":376},"Squashing Migrations","/migrations/squashing-migrations","08.migrations/11.squashing-migrations",{"title":378,"path":379,"stem":380},"Serializing Values","/migrations/serializing-values","08.migrations/12.serializing-values",{"title":382,"path":383,"stem":384},"Supporting Multiple Django Versions","/migrations/supporting-multiple-django-versions","08.migrations/13.supporting-multiple-django-versions",{"title":386,"path":387,"stem":388},"Django Serialization Framework","/migrations/django-serialization-framework","08.migrations/14.django-serialization-framework",{"title":390,"path":391,"stem":392,"children":393},"Authentication and Authorization","/authentication-and-authorization","09.authentication-and-authorization/01.index",[394,395,399,403,407,411,415,419,423,427,431,435],{"title":390,"path":391,"stem":392},{"title":396,"path":397,"stem":398},"Overview of Django's Authentication System","/authentication-and-authorization/overview-of-django-authentication-system","09.authentication-and-authorization/02.overview-of-django-authentication-system",{"title":400,"path":401,"stem":402},"Users and Groups","/authentication-and-authorization/users-and-groups","09.authentication-and-authorization/03.users-and-groups",{"title":404,"path":405,"stem":406},"Permissions","/authentication-and-authorization/permissions","09.authentication-and-authorization/04.permissions",{"title":408,"path":409,"stem":410},"Password Management","/authentication-and-authorization/password-management","09.authentication-and-authorization/05.password-management",{"title":412,"path":413,"stem":414},"Authentication Views","/authentication-and-authorization/authentication-views","09.authentication-and-authorization/06.authentication-views",{"title":416,"path":417,"stem":418},"Login and Logout","/authentication-and-authorization/login-and-logout","09.authentication-and-authorization/07.login-and-logout",{"title":420,"path":421,"stem":422},"Custom User Models","/authentication-and-authorization/custom-user-models","09.authentication-and-authorization/08.custom-user-models",{"title":424,"path":425,"stem":426},"Middleware for Authentication","/authentication-and-authorization/middleware-for-authentication","09.authentication-and-authorization/09.middleware-for-authentication",{"title":428,"path":429,"stem":430},"Authorization in Views and Templates","/authentication-and-authorization/authorization-in-views-and-templates","09.authentication-and-authorization/10.authorization-in-views-and-templates",{"title":432,"path":433,"stem":434},"Integrating Social Authentication","/authentication-and-authorization/integrating-social-authentication","09.authentication-and-authorization/11.integrating-social-authentication",{"title":436,"path":437,"stem":438},"Security Best Practices","/authentication-and-authorization/security-best-practices","09.authentication-and-authorization/12.security-best-practices",{"title":440,"path":441,"stem":442,"children":443},"Sessions, Cookies, and State","/sessions-cookies-state","10.sessions-cookies-state/01.index",[444,446,450,454,458],{"title":445,"path":441,"stem":442},"Sessions, Cookies, and State Management",{"title":447,"path":448,"stem":449},"Introduction to Sessions","/sessions-cookies-state/introduction-to-sessions","10.sessions-cookies-state/02.introduction-to-sessions",{"title":451,"path":452,"stem":453},"Working with Cookies","/sessions-cookies-state/working-with-cookies","10.sessions-cookies-state/03.working-with-cookies",{"title":455,"path":456,"stem":457},"Server-Side Session Storage Options","/sessions-cookies-state/server-side-session-storage-options","10.sessions-cookies-state/04.server-side-session-storage-options",{"title":459,"path":460,"stem":461},"Session Security","/sessions-cookies-state/session-security","10.sessions-cookies-state/05.session-security",{"title":463,"path":464,"stem":465,"children":466},"Working with Files","/working-with-files","11.working-with-files/01.index",[467,468,472,476,480,484],{"title":463,"path":464,"stem":465},{"title":469,"path":470,"stem":471},"Files in Models","/working-with-files/files-in-models","11.working-with-files/02.files-in-models",{"title":473,"path":474,"stem":475},"The File Object","/working-with-files/the-file-object","11.working-with-files/03.the-file-object",{"title":477,"path":478,"stem":479},"Storage Backends","/working-with-files/storage-backends","11.working-with-files/04.storage-backends",{"title":481,"path":482,"stem":483},"Using Cloud Storage Providers","/working-with-files/using-cloud-storage-providers","11.working-with-files/05.using-cloud-storage-providers",{"title":485,"path":486,"stem":487},"Managing Media in Production","/working-with-files/managing-media-in-production","11.working-with-files/06.managing-media-in-production",{"title":489,"path":490,"stem":491,"children":492},"Admin Site","/admin-site","12.admin-site/01.index",[493,494,498,502,506,510],{"title":489,"path":490,"stem":491},{"title":495,"path":496,"stem":497},"Enabling the Admin","/admin-site/enabling-the-admin","12.admin-site/02.enabling-the-admin",{"title":499,"path":500,"stem":501},"Registering Models","/admin-site/registering-models","12.admin-site/03.registering-models",{"title":503,"path":504,"stem":505},"Customizing Admin Display","/admin-site/customizing-admin-display","12.admin-site/04.customizing-admin-display",{"title":507,"path":508,"stem":509},"Admin Actions","/admin-site/admin-actions","12.admin-site/05.admin-actions",{"title":511,"path":512,"stem":513},"Admin Security Best Practices","/admin-site/admin-security-best-practices","12.admin-site/06.admin-security-best-practices",{"title":515,"path":516,"stem":517,"children":518},"Middleware","/middleware","13.middleware/01.index",[519,520,524,528,532,536],{"title":515,"path":516,"stem":517},{"title":521,"path":522,"stem":523},"Middleware Overview","/middleware/middleware-overview","13.middleware/02.middleware-overview",{"title":525,"path":526,"stem":527},"Built-in Middleware","/middleware/built-in-middleware","13.middleware/03.built-in-middleware",{"title":529,"path":530,"stem":531},"Creating Custom Middleware","/middleware/creating-custom-middleware","13.middleware/04.creating-custom-middleware",{"title":533,"path":534,"stem":535},"Middleware Ordering","/middleware/middleware-ordering","13.middleware/05.middleware-ordering",{"title":537,"path":538,"stem":539},"Performance and Debugging","/middleware/performance-and-debugging","13.middleware/06.performance-and-debugging",{"title":541,"path":542,"stem":543,"children":544},"Security","/security","14.security/01.index",[545,546,550,554,558,562,566,570,574],{"title":541,"path":542,"stem":543},{"title":547,"path":548,"stem":549},"Django Security Philosophy","/security/django-security-philosophy","14.security/02.django-security-philosophy",{"title":551,"path":552,"stem":553},"Cross Site Request Forgery","/security/cross-site-request-forgery","14.security/03.cross-site-request-forgery",{"title":555,"path":556,"stem":557},"Cross Site Scripting","/security/cross-site-scripting","14.security/04.cross-site-scripting",{"title":559,"path":560,"stem":561},"SQL Injection Protection","/security/sql-injection-protection","14.security/05.sql-injection-protection",{"title":563,"path":564,"stem":565},"Clickjacking Protection","/security/clickjacking-protection","14.security/06.clickjacking-protection",{"title":567,"path":568,"stem":569},"HTTPS Setup and HSTS","/security/https-setup-and-hsts","14.security/07.https-setup-and-hsts",{"title":571,"path":572,"stem":573},"Password Storage and Cryptography","/security/password-storage-and-cryptography","14.security/08.password-storage-and-cryptography",{"title":575,"path":576,"stem":577},"Secure Deployment Checklist","/security/secure-deployment-checklist","14.security/09.secure-deployment-checklist",{"title":579,"path":580,"stem":581,"children":582},"Testing","/testing","15.testing/01.index",[583,584,588,592,596,600,604,608,612,616,620],{"title":579,"path":580,"stem":581},{"title":585,"path":586,"stem":587},"Introduction to Django Testing","/testing/introduction-to-django-testing","15.testing/02.introduction-to-django-testing",{"title":589,"path":590,"stem":591},"Writing and Running Tests","/testing/writing-and-running-tests","15.testing/03.writing-and-running-tests",{"title":593,"path":594,"stem":595},"Test Tools","/testing/test-tools","15.testing/04.test-tools",{"title":597,"path":598,"stem":599},"Testing Models","/testing/testing-models","15.testing/05.testing-models",{"title":601,"path":602,"stem":603},"Testing Views","/testing/testing-views","15.testing/06.testing-views",{"title":605,"path":606,"stem":607},"Testing Forms","/testing/testing-forms","15.testing/07.testing-forms",{"title":609,"path":610,"stem":611},"Testing Templates","/testing/testing-templates","15.testing/08.testing-templates",{"title":613,"path":614,"stem":615},"Testing Authentication","/testing/testing-authentication","15.testing/09.testing-authentication",{"title":617,"path":618,"stem":619},"Advanced Testing Topics","/testing/advanced-testing-topics","15.testing/10.advanced-testing-topics",{"title":621,"path":622,"stem":623},"Performance Testing","/testing/performance-testing","15.testing/11.performance-testing",{"title":625,"path":626,"stem":627,"children":628},"Static Assets and Frontend Integration","/static-assets-and-frontend-integration","16.static-assets-and-frontend-integration/01.index",[629,630,634,638,642,646],{"title":625,"path":626,"stem":627},{"title":631,"path":632,"stem":633},"Working with Static Files","/static-assets-and-frontend-integration/working-with-static-files","16.static-assets-and-frontend-integration/02.working-with-static-files",{"title":635,"path":636,"stem":637},"Integrating CSS and JavaScript","/static-assets-and-frontend-integration/integrating-css-and-javascript","16.static-assets-and-frontend-integration/03.integrating-css-and-javascript",{"title":639,"path":640,"stem":641},"Using Build Tools like Vite or Webpack","/static-assets-and-frontend-integration/using-build-tools-like-vite-or-webpack","16.static-assets-and-frontend-integration/04.using-build-tools-like-vite-or-webpack",{"title":643,"path":644,"stem":645},"Using React or Vue with Django","/static-assets-and-frontend-integration/using-react-or-vue-with-django","16.static-assets-and-frontend-integration/05.using-react-or-vue-with-django",{"title":647,"path":648,"stem":649},"Managing CORS","/static-assets-and-frontend-integration/managing-cors","16.static-assets-and-frontend-integration/06.managing-cors",{"title":651,"path":652,"stem":653,"children":654},"Internationalization and Localization","/internationalization-and-localization","17.internationalization-and-localization/01.index",[655,656,660,664,668],{"title":651,"path":652,"stem":653},{"title":657,"path":658,"stem":659},"Enabling Translation","/internationalization-and-localization/enabling-translation","17.internationalization-and-localization/02.enabling-translation",{"title":661,"path":662,"stem":663},"Translating Text in Code and Templates","/internationalization-and-localization/translating-text-in-code-and-templates","17.internationalization-and-localization/03.translating-text-in-code-and-templates",{"title":665,"path":666,"stem":667},"Timezone Support","/internationalization-and-localization/timezone-support","17.internationalization-and-localization/04.timezone-support",{"title":669,"path":670,"stem":671},"Locale Middleware","/internationalization-and-localization/locale-middleware","17.internationalization-and-localization/05.locale-middleware",{"title":673,"path":674,"stem":675,"children":676},"Caching","/caching","18.caching/01.index",[677,678,682,686,690,694,698],{"title":673,"path":674,"stem":675},{"title":679,"path":680,"stem":681},"Introduction to Caching","/caching/introduction-to-caching","18.caching/02.introduction-to-caching",{"title":683,"path":684,"stem":685},"Cache Backends","/caching/cache-backends","18.caching/03.cache-backends",{"title":687,"path":688,"stem":689},"Per View Caching","/caching/per-view-caching","18.caching/04.per-view-caching",{"title":691,"path":692,"stem":693},"Low Level Cache API","/caching/low-level-cache-api","18.caching/05.low-level-cache-api",{"title":695,"path":696,"stem":697},"Template Fragment Caching","/caching/template-fragment-caching","18.caching/06.template-fragment-caching",{"title":699,"path":700,"stem":701},"Deployment Level Caching Patterns","/caching/deployment-level-caching-patterns","18.caching/07.deployment-level-caching-patterns",{"title":703,"path":704,"stem":705,"children":706},"Asynchronous Django","/asynchronous-django","19.asynchronous-django/01.index",[707,708,712,716,720,724,728,732],{"title":703,"path":704,"stem":705},{"title":709,"path":710,"stem":711},"Introduction to ASGI","/asynchronous-django/introduction-to-asgi","19.asynchronous-django/02.introduction-to-asgi",{"title":713,"path":714,"stem":715},"Async Views","/asynchronous-django/async-views","19.asynchronous-django/03.async-views",{"title":717,"path":718,"stem":719},"Async ORM Status","/asynchronous-django/async-orm-status","19.asynchronous-django/04.async-orm-status",{"title":721,"path":722,"stem":723},"WebSockets with Channels","/asynchronous-django/websockets-with-channels","19.asynchronous-django/05.websockets-with-channels",{"title":725,"path":726,"stem":727},"Background Tasks with Celery or RQ","/asynchronous-django/background-tasks-with-celery-or-rq","19.asynchronous-django/06.background-tasks-with-celery-or-rq",{"title":729,"path":730,"stem":731},"Asynchronous Support","/asynchronous-django/asynchronous-support","19.asynchronous-django/07.asynchronous-support",{"title":733,"path":734,"stem":735},"Django's Tasks Framework","/asynchronous-django/django-tasks-framework","19.asynchronous-django/08.django-tasks-framework",{"title":737,"path":738,"stem":739,"children":740},"Deployment","/deployment","20.deployment/01.index",[741,742,746,750,754,758,762,766,770],{"title":737,"path":738,"stem":739},{"title":743,"path":744,"stem":745},"Preparing for Production","/deployment/preparing-for-production","20.deployment/02.preparing-for-production",{"title":747,"path":748,"stem":749},"Using WSGI and ASGI Servers","/deployment/using-wsgi-and-asgi-servers","20.deployment/03.using-wsgi-and-asgi-servers",{"title":751,"path":752,"stem":753},"Deploying on Linux Servers","/deployment/deploying-on-linux-servers","20.deployment/04.deploying-on-linux-servers",{"title":755,"path":756,"stem":757},"Using Docker","/deployment/using-docker","20.deployment/05.using-docker",{"title":759,"path":760,"stem":761},"Cloud Deployment Guides","/deployment/cloud-deployment-guides","20.deployment/06.cloud-deployment-guides",{"title":763,"path":764,"stem":765},"Scaling and Load Balancing","/deployment/scaling-and-load-balancing","20.deployment/07.scaling-and-load-balancing",{"title":767,"path":768,"stem":769},"Monitoring and Logging","/deployment/monitoring-and-logging","20.deployment/08.monitoring-and-logging",{"title":771,"path":772,"stem":773},"Backup Strategies","/deployment/backup-strategies","20.deployment/09.backup-strategies",{"title":775,"path":776,"stem":777,"children":778},"Performance and Optimization","/performance-and-optimization","21.performance-and-optimization/01.index",[779,780,784,788,792,796],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783},"Query Optimization","/performance-and-optimization/query-optimization","21.performance-and-optimization/02.query-optimization",{"title":785,"path":786,"stem":787},"Template Rendering Optimization","/performance-and-optimization/template-rendering-optimization","21.performance-and-optimization/03.template-rendering-optimization",{"title":789,"path":790,"stem":791},"Using Select Related and Prefetch Related","/performance-and-optimization/using-select-related-and-prefetch-related","21.performance-and-optimization/04.using-select-related-and-prefetch-related",{"title":793,"path":794,"stem":795},"Caching Strategies","/performance-and-optimization/caching-strategies","21.performance-and-optimization/05.caching-strategies",{"title":797,"path":798,"stem":799},"Profiling Django Apps","/performance-and-optimization/profiling-django-apps","21.performance-and-optimization/06.profiling-django-apps",{"title":801,"path":802,"stem":803,"children":804},"Advanced and Expert Topics","/advanced-and-expert-topics","22.advanced-and-expert-topics/01.index",[805,806,810,814,818,822,826,830,834,838,842,846],{"title":801,"path":802,"stem":803},{"title":807,"path":808,"stem":809},"System Architecture Patterns","/advanced-and-expert-topics/system-architecture-patterns","22.advanced-and-expert-topics/02.system-architecture-patterns",{"title":811,"path":812,"stem":813},"Domain Driven Design with Django","/advanced-and-expert-topics/domain-driven-design-with-django","22.advanced-and-expert-topics/03.domain-driven-design-with-django",{"title":815,"path":816,"stem":817},"Building Large Scale Django Projects","/advanced-and-expert-topics/building-large-scale-django-projects","22.advanced-and-expert-topics/04.building-large-scale-django-projects",{"title":819,"path":820,"stem":821},"Plugin Architectures for Django Apps","/advanced-and-expert-topics/plugin-architectures-for-django-apps","22.advanced-and-expert-topics/05.plugin-architectures-for-django-apps",{"title":823,"path":824,"stem":825},"Extending Django's Core","/advanced-and-expert-topics/extending-djangos-core","22.advanced-and-expert-topics/06.extending-djangos-core",{"title":827,"path":828,"stem":829},"Custom ORM Expressions","/advanced-and-expert-topics/custom-orm-expressions","22.advanced-and-expert-topics/07.custom-orm-expressions",{"title":831,"path":832,"stem":833},"Custom Management Commands","/advanced-and-expert-topics/custom-management-commands","22.advanced-and-expert-topics/08.custom-management-commands",{"title":835,"path":836,"stem":837},"Working with Signals","/advanced-and-expert-topics/working-with-signals","22.advanced-and-expert-topics/09.working-with-signals",{"title":839,"path":840,"stem":841},"Building Reusable Django Packages","/advanced-and-expert-topics/building-reusable-django-packages","22.advanced-and-expert-topics/10.building-reusable-django-packages",{"title":843,"path":844,"stem":845},"Integrating Microservices","/advanced-and-expert-topics/integrating-microservices","22.advanced-and-expert-topics/11.integrating-microservices",{"title":847,"path":848,"stem":849},"Advanced Security Hardening","/advanced-and-expert-topics/advanced-security-hardening","22.advanced-and-expert-topics/12.advanced-security-hardening",{"title":851,"path":852,"stem":853,"children":854},"Logging in Django","/logging-in-django","23.logging-in-django/01.index",[855],{"title":851,"path":852,"stem":853},{"title":857,"path":858,"stem":859,"children":860},"FAQ and Troubleshooting","/faq-and-troubleshooting","24.faq-and-troubleshooting/01.index",[861],{"title":857,"path":858,"stem":859},{"title":863,"path":864,"stem":865,"children":866},"External Packages and Ecosystem","/external-packages-and-ecosystem","25.external-packages-and-ecosystem/01.index",[867],{"title":863,"path":864,"stem":865},{"title":869,"path":870,"stem":871,"children":872},"Django Internals and Contributing","/django-internals-and-contributing","26.django-internals-and-contributing/01.index",[873],{"title":869,"path":870,"stem":871},{"title":875,"path":876,"stem":877,"children":878},"Microservices with Django","/microservices-with-django","27.microservices-with-django/01.index",[879,880,884,888,892,896,900,904,908,912,916,920,924],{"title":875,"path":876,"stem":877},{"title":881,"path":882,"stem":883},"What Is a Microservice?","/microservices-with-django/what-is-a-microservice","27.microservices-with-django/02.what-is-a-microservice",{"title":885,"path":886,"stem":887},"Introducing the Django Microservices Architecture","/microservices-with-django/django-microservices-architecture","27.microservices-with-django/03.django-microservices-architecture",{"title":889,"path":890,"stem":891},"Setting Up the Development and Runtime Environment","/microservices-with-django/development-environment","27.microservices-with-django/04.development-environment",{"title":893,"path":894,"stem":895},"Cloud-native Data Processing with MongoDB","/microservices-with-django/cloud-native-data-processing","27.microservices-with-django/05.cloud-native-data-processing",{"title":897,"path":898,"stem":899},"Creating RESTful APIs for Microservices","/microservices-with-django/restful-apis","27.microservices-with-django/06.restful-apis",{"title":901,"path":902,"stem":903},"Orchestrating Microservices with Celery and RabbitMQ","/microservices-with-django/orchestrating-celery-rabbitmq","27.microservices-with-django/07.orchestrating-celery-rabbitmq",{"title":905,"path":906,"stem":907},"Testing Microservices","/microservices-with-django/testing-microservices","27.microservices-with-django/08.testing-microservices",{"title":909,"path":910,"stem":911},"Deploying Microservices","/microservices-with-django/deploying-microservices","27.microservices-with-django/09.deploying-microservices",{"title":913,"path":914,"stem":915},"Securing Microservices","/microservices-with-django/securing-microservices","27.microservices-with-django/10.securing-microservices",{"title":917,"path":918,"stem":919},"Improving Microservices Performance with Caching","/microservices-with-django/performance-caching","27.microservices-with-django/11.performance-caching",{"title":921,"path":922,"stem":923},"Best Practices","/microservices-with-django/best-practices","27.microservices-with-django/12.best-practices",{"title":925,"path":926,"stem":927},"Transforming a Monolithic Web App into a Microservice version","/microservices-with-django/monolith-to-microservices","27.microservices-with-django/13.monolith-to-microservices",{"title":929,"path":930,"stem":931,"children":932},"Releases","/releases","releases",[933,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012],{"title":934,"path":930,"stem":935},"Django Releases","releases/index",{"title":937,"path":938,"stem":939},"Django 5.1.10 release notes","/releases/5.1.10","releases/5.1.10",{"title":941,"path":942,"stem":943},"Django 5.1.11 release notes","/releases/5.1.11","releases/5.1.11",{"title":945,"path":946,"stem":947},"Django 5.1.12 release notes","/releases/5.1.12","releases/5.1.12",{"title":949,"path":950,"stem":951},"Django 5.1.13 release notes","/releases/5.1.13","releases/5.1.13",{"title":953,"path":954,"stem":955},"Django 5.1.14 release notes","/releases/5.1.14","releases/5.1.14",{"title":957,"path":958,"stem":959},"Django 5.1.15 release notes","/releases/5.1.15","releases/5.1.15",{"title":961,"path":962,"stem":963},"Django 5.2 release notes","/releases/5.2","releases/5.2",{"title":965,"path":966,"stem":967},"Django 5.2.1 release notes","/releases/5.2.1","releases/5.2.1",{"title":969,"path":970,"stem":971},"Django 5.2.10 release notes","/releases/5.2.10","releases/5.2.10",{"title":973,"path":974,"stem":975},"Django 5.2.2 release notes","/releases/5.2.2","releases/5.2.2",{"title":977,"path":978,"stem":979},"Django 5.2.3 release notes","/releases/5.2.3","releases/5.2.3",{"title":981,"path":982,"stem":983},"Django 5.2.4 release notes","/releases/5.2.4","releases/5.2.4",{"title":985,"path":986,"stem":987},"Django 5.2.5 release notes","/releases/5.2.5","releases/5.2.5",{"title":989,"path":990,"stem":991},"Django 5.2.6 release notes","/releases/5.2.6","releases/5.2.6",{"title":993,"path":994,"stem":995},"Django 5.2.7 release notes","/releases/5.2.7","releases/5.2.7",{"title":997,"path":998,"stem":999},"Django 5.2.8 release notes","/releases/5.2.8","releases/5.2.8",{"title":1001,"path":1002,"stem":1003},"Django 5.2.9 release notes","/releases/5.2.9","releases/5.2.9",{"title":1005,"path":1006,"stem":1007},"Django 6.0 release notes","/releases/6.0","releases/6.0",{"title":1009,"path":1010,"stem":1011},"Django 6.0.1 release notes","/releases/6.0.1","releases/6.0.1",{"title":1013,"path":1014,"stem":1015},"Django 6.1 release notes - UNDER DEVELOPMENT","/releases/6.1","releases/6.1",{"id":1017,"title":66,"body":1018,"description":1028,"extension":6628,"links":6629,"meta":6630,"navigation":1135,"path":67,"seo":6631,"stem":68,"__hash__":6632},"docs/02.development-environment/3.virtual-environments.md",{"type":1019,"value":1020,"toc":6589},"minimark",[1021,1025,1029,1034,1039,1042,1071,1075,1230,1234,1238,1243,1328,1333,1442,1446,1451,1520,1525,1583,1587,1595,1599,1603,1608,1699,1704,1777,1780,1785,1856,1861,1970,1975,2044,2048,2052,2099,2104,2285,2290,2390,2394,2397,2401,2415,2420,2540,2545,2833,2837,2981,2985,2989,3014,3018,3133,3138,3530,3534,3657,3661,3665,3671,3675,3680,3712,3717,3776,3781,3819,3823,3828,3964,3969,4183,4187,4191,4196,4580,4585,4707,4711,4716,5239,5242,5246,5321,5325,5331,5334,5339,5401,5406,5466,5469,5474,5529,5533,5537,5542,5611,5616,5694,5699,5748,5753,5803,5807,5812,5908,5913,6582,6585],[1022,1023,66],"h1",{"id":1024},"virtual-environments",[1026,1027,1028],"p",{},"Virtual environments are essential for Python and Django development, providing isolated spaces for project dependencies. This comprehensive guide covers everything you need to know about creating, managing, and optimizing virtual environments for Django projects.",[1030,1031,1033],"h2",{"id":1032},"why-virtual-environments-matter","Why Virtual Environments Matter",[1035,1036,1038],"h3",{"id":1037},"dependency-isolation","Dependency Isolation",[1026,1040,1041],{},"Without virtual environments, all Python packages are installed globally, leading to:",[1043,1044,1045,1053,1059,1065],"ul",{},[1046,1047,1048,1052],"li",{},[1049,1050,1051],"strong",{},"Version conflicts"," between different projects",[1046,1054,1055,1058],{},[1049,1056,1057],{},"Dependency pollution"," affecting system Python",[1046,1060,1061,1064],{},[1049,1062,1063],{},"Deployment inconsistencies"," between environments",[1046,1066,1067,1070],{},[1049,1068,1069],{},"Difficult troubleshooting"," when packages interfere",[1035,1072,1074],{"id":1073},"real-world-example","Real-World Example",[1076,1077,1082],"pre",{"className":1078,"code":1079,"language":1080,"meta":1081,"style":1081},"language-bash shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# Without virtual environments - PROBLEMATIC\npip install Django==3.2  # Project A needs Django 3.2\npip install Django==4.2  # Project B needs Django 4.2 - CONFLICT!\n\n# With virtual environments - CLEAN\n# Project A\npython -m venv project_a_env\nsource project_a_env/bin/activate\npip install Django==3.2\n\n# Project B  \npython -m venv project_b_env\nsource project_b_env/bin/activate\npip install Django==4.2\n","bash","",[1083,1084,1085,1094,1115,1130,1137,1143,1149,1165,1175,1187,1192,1198,1210,1218],"code",{"__ignoreMap":1081},[1086,1087,1090],"span",{"class":1088,"line":1089},"line",1,[1086,1091,1093],{"class":1092},"s9Tkl","# Without virtual environments - PROBLEMATIC\n",[1086,1095,1097,1101,1105,1108,1112],{"class":1088,"line":1096},2,[1086,1098,1100],{"class":1099},"sYn-s","pip",[1086,1102,1104],{"class":1103},"sTbE_"," install",[1086,1106,1107],{"class":1103}," Django==",[1086,1109,1111],{"class":1110},"s7CZa","3.2",[1086,1113,1114],{"class":1092},"  # Project A needs Django 3.2\n",[1086,1116,1118,1120,1122,1124,1127],{"class":1088,"line":1117},3,[1086,1119,1100],{"class":1099},[1086,1121,1104],{"class":1103},[1086,1123,1107],{"class":1103},[1086,1125,1126],{"class":1110},"4.2",[1086,1128,1129],{"class":1092},"  # Project B needs Django 4.2 - CONFLICT!\n",[1086,1131,1133],{"class":1088,"line":1132},4,[1086,1134,1136],{"emptyLinePlaceholder":1135},true,"\n",[1086,1138,1140],{"class":1088,"line":1139},5,[1086,1141,1142],{"class":1092},"# With virtual environments - CLEAN\n",[1086,1144,1146],{"class":1088,"line":1145},6,[1086,1147,1148],{"class":1092},"# Project A\n",[1086,1150,1152,1155,1159,1162],{"class":1088,"line":1151},7,[1086,1153,1154],{"class":1099},"python",[1086,1156,1158],{"class":1157},"sz9Cv"," -m",[1086,1160,1161],{"class":1103}," venv",[1086,1163,1164],{"class":1103}," project_a_env\n",[1086,1166,1168,1172],{"class":1088,"line":1167},8,[1086,1169,1171],{"class":1170},"sJdAF","source",[1086,1173,1174],{"class":1103}," project_a_env/bin/activate\n",[1086,1176,1178,1180,1182,1184],{"class":1088,"line":1177},9,[1086,1179,1100],{"class":1099},[1086,1181,1104],{"class":1103},[1086,1183,1107],{"class":1103},[1086,1185,1186],{"class":1110},"3.2\n",[1086,1188,1190],{"class":1088,"line":1189},10,[1086,1191,1136],{"emptyLinePlaceholder":1135},[1086,1193,1195],{"class":1088,"line":1194},11,[1086,1196,1197],{"class":1092},"# Project B  \n",[1086,1199,1201,1203,1205,1207],{"class":1088,"line":1200},12,[1086,1202,1154],{"class":1099},[1086,1204,1158],{"class":1157},[1086,1206,1161],{"class":1103},[1086,1208,1209],{"class":1103}," project_b_env\n",[1086,1211,1213,1215],{"class":1088,"line":1212},13,[1086,1214,1171],{"class":1170},[1086,1216,1217],{"class":1103}," project_b_env/bin/activate\n",[1086,1219,1221,1223,1225,1227],{"class":1088,"line":1220},14,[1086,1222,1100],{"class":1099},[1086,1224,1104],{"class":1103},[1086,1226,1107],{"class":1103},[1086,1228,1229],{"class":1110},"4.2\n",[1030,1231,1233],{"id":1232},"built-in-venv-module","Built-in venv Module",[1035,1235,1237],{"id":1236},"creating-virtual-environments","Creating Virtual Environments",[1026,1239,1240],{},[1049,1241,1242],{},"Basic Creation:",[1076,1244,1246],{"className":1078,"code":1245,"language":1080,"meta":1081,"style":1081},"# Create virtual environment\npython -m venv myproject_env\n\n# Alternative naming conventions\npython -m venv venv          # Simple and common\npython -m venv .venv         # Hidden directory\npython -m venv env           # Short name\npython -m venv django_env    # Descriptive name\n",[1083,1247,1248,1253,1264,1268,1273,1286,1300,1314],{"__ignoreMap":1081},[1086,1249,1250],{"class":1088,"line":1089},[1086,1251,1252],{"class":1092},"# Create virtual environment\n",[1086,1254,1255,1257,1259,1261],{"class":1088,"line":1096},[1086,1256,1154],{"class":1099},[1086,1258,1158],{"class":1157},[1086,1260,1161],{"class":1103},[1086,1262,1263],{"class":1103}," myproject_env\n",[1086,1265,1266],{"class":1088,"line":1117},[1086,1267,1136],{"emptyLinePlaceholder":1135},[1086,1269,1270],{"class":1088,"line":1132},[1086,1271,1272],{"class":1092},"# Alternative naming conventions\n",[1086,1274,1275,1277,1279,1281,1283],{"class":1088,"line":1139},[1086,1276,1154],{"class":1099},[1086,1278,1158],{"class":1157},[1086,1280,1161],{"class":1103},[1086,1282,1161],{"class":1103},[1086,1284,1285],{"class":1092},"          # Simple and common\n",[1086,1287,1288,1290,1292,1294,1297],{"class":1088,"line":1145},[1086,1289,1154],{"class":1099},[1086,1291,1158],{"class":1157},[1086,1293,1161],{"class":1103},[1086,1295,1296],{"class":1103}," .venv",[1086,1298,1299],{"class":1092},"         # Hidden directory\n",[1086,1301,1302,1304,1306,1308,1311],{"class":1088,"line":1151},[1086,1303,1154],{"class":1099},[1086,1305,1158],{"class":1157},[1086,1307,1161],{"class":1103},[1086,1309,1310],{"class":1103}," env",[1086,1312,1313],{"class":1092},"           # Short name\n",[1086,1315,1316,1318,1320,1322,1325],{"class":1088,"line":1167},[1086,1317,1154],{"class":1099},[1086,1319,1158],{"class":1157},[1086,1321,1161],{"class":1103},[1086,1323,1324],{"class":1103}," django_env",[1086,1326,1327],{"class":1092},"    # Descriptive name\n",[1026,1329,1330],{},[1049,1331,1332],{},"Advanced Creation Options:",[1076,1334,1336],{"className":1078,"code":1335,"language":1080,"meta":1081,"style":1081},"# Create with specific Python version\npython3.11 -m venv myproject_env\n\n# Create without pip (install separately)\npython -m venv --without-pip myproject_env\n\n# Create with system site packages access\npython -m venv --system-site-packages myproject_env\n\n# Upgrade existing environment\npython -m venv --upgrade myproject_env\n\n# Clear existing environment\npython -m venv --clear myproject_env\n",[1083,1337,1338,1343,1354,1358,1363,1376,1380,1385,1398,1402,1407,1420,1424,1429],{"__ignoreMap":1081},[1086,1339,1340],{"class":1088,"line":1089},[1086,1341,1342],{"class":1092},"# Create with specific Python version\n",[1086,1344,1345,1348,1350,1352],{"class":1088,"line":1096},[1086,1346,1347],{"class":1099},"python3.11",[1086,1349,1158],{"class":1157},[1086,1351,1161],{"class":1103},[1086,1353,1263],{"class":1103},[1086,1355,1356],{"class":1088,"line":1117},[1086,1357,1136],{"emptyLinePlaceholder":1135},[1086,1359,1360],{"class":1088,"line":1132},[1086,1361,1362],{"class":1092},"# Create without pip (install separately)\n",[1086,1364,1365,1367,1369,1371,1374],{"class":1088,"line":1139},[1086,1366,1154],{"class":1099},[1086,1368,1158],{"class":1157},[1086,1370,1161],{"class":1103},[1086,1372,1373],{"class":1157}," --without-pip",[1086,1375,1263],{"class":1103},[1086,1377,1378],{"class":1088,"line":1145},[1086,1379,1136],{"emptyLinePlaceholder":1135},[1086,1381,1382],{"class":1088,"line":1151},[1086,1383,1384],{"class":1092},"# Create with system site packages access\n",[1086,1386,1387,1389,1391,1393,1396],{"class":1088,"line":1167},[1086,1388,1154],{"class":1099},[1086,1390,1158],{"class":1157},[1086,1392,1161],{"class":1103},[1086,1394,1395],{"class":1157}," --system-site-packages",[1086,1397,1263],{"class":1103},[1086,1399,1400],{"class":1088,"line":1177},[1086,1401,1136],{"emptyLinePlaceholder":1135},[1086,1403,1404],{"class":1088,"line":1189},[1086,1405,1406],{"class":1092},"# Upgrade existing environment\n",[1086,1408,1409,1411,1413,1415,1418],{"class":1088,"line":1194},[1086,1410,1154],{"class":1099},[1086,1412,1158],{"class":1157},[1086,1414,1161],{"class":1103},[1086,1416,1417],{"class":1157}," --upgrade",[1086,1419,1263],{"class":1103},[1086,1421,1422],{"class":1088,"line":1200},[1086,1423,1136],{"emptyLinePlaceholder":1135},[1086,1425,1426],{"class":1088,"line":1212},[1086,1427,1428],{"class":1092},"# Clear existing environment\n",[1086,1430,1431,1433,1435,1437,1440],{"class":1088,"line":1220},[1086,1432,1154],{"class":1099},[1086,1434,1158],{"class":1157},[1086,1436,1161],{"class":1103},[1086,1438,1439],{"class":1157}," --clear",[1086,1441,1263],{"class":1103},[1035,1443,1445],{"id":1444},"activation-and-deactivation","Activation and Deactivation",[1026,1447,1448],{},[1049,1449,1450],{},"Linux/macOS:",[1076,1452,1454],{"className":1078,"code":1453,"language":1080,"meta":1081,"style":1081},"# Activate\nsource myproject_env/bin/activate\n\n# Verify activation\nwhich python\n# Should show: /path/to/myproject_env/bin/python\n\n# Check Python version\npython --version\n\n# Deactivate\ndeactivate\n",[1083,1455,1456,1461,1468,1472,1477,1485,1490,1494,1499,1506,1510,1515],{"__ignoreMap":1081},[1086,1457,1458],{"class":1088,"line":1089},[1086,1459,1460],{"class":1092},"# Activate\n",[1086,1462,1463,1465],{"class":1088,"line":1096},[1086,1464,1171],{"class":1170},[1086,1466,1467],{"class":1103}," myproject_env/bin/activate\n",[1086,1469,1470],{"class":1088,"line":1117},[1086,1471,1136],{"emptyLinePlaceholder":1135},[1086,1473,1474],{"class":1088,"line":1132},[1086,1475,1476],{"class":1092},"# Verify activation\n",[1086,1478,1479,1482],{"class":1088,"line":1139},[1086,1480,1481],{"class":1170},"which",[1086,1483,1484],{"class":1103}," python\n",[1086,1486,1487],{"class":1088,"line":1145},[1086,1488,1489],{"class":1092},"# Should show: /path/to/myproject_env/bin/python\n",[1086,1491,1492],{"class":1088,"line":1151},[1086,1493,1136],{"emptyLinePlaceholder":1135},[1086,1495,1496],{"class":1088,"line":1167},[1086,1497,1498],{"class":1092},"# Check Python version\n",[1086,1500,1501,1503],{"class":1088,"line":1177},[1086,1502,1154],{"class":1099},[1086,1504,1505],{"class":1157}," --version\n",[1086,1507,1508],{"class":1088,"line":1189},[1086,1509,1136],{"emptyLinePlaceholder":1135},[1086,1511,1512],{"class":1088,"line":1194},[1086,1513,1514],{"class":1092},"# Deactivate\n",[1086,1516,1517],{"class":1088,"line":1200},[1086,1518,1519],{"class":1099},"deactivate\n",[1026,1521,1522],{},[1049,1523,1524],{},"Windows:",[1076,1526,1530],{"className":1527,"code":1528,"language":1529,"meta":1081,"style":1081},"language-cmd shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# Command Prompt\nmyproject_env\\Scripts\\activate.bat\n\n# PowerShell\nmyproject_env\\Scripts\\Activate.ps1\n\n# Git Bash\nsource myproject_env/Scripts/activate\n\n# Deactivate (all platforms)\ndeactivate\n","cmd",[1083,1531,1532,1537,1542,1546,1551,1556,1560,1565,1570,1574,1579],{"__ignoreMap":1081},[1086,1533,1534],{"class":1088,"line":1089},[1086,1535,1536],{},"# Command Prompt\n",[1086,1538,1539],{"class":1088,"line":1096},[1086,1540,1541],{},"myproject_env\\Scripts\\activate.bat\n",[1086,1543,1544],{"class":1088,"line":1117},[1086,1545,1136],{"emptyLinePlaceholder":1135},[1086,1547,1548],{"class":1088,"line":1132},[1086,1549,1550],{},"# PowerShell\n",[1086,1552,1553],{"class":1088,"line":1139},[1086,1554,1555],{},"myproject_env\\Scripts\\Activate.ps1\n",[1086,1557,1558],{"class":1088,"line":1145},[1086,1559,1136],{"emptyLinePlaceholder":1135},[1086,1561,1562],{"class":1088,"line":1151},[1086,1563,1564],{},"# Git Bash\n",[1086,1566,1567],{"class":1088,"line":1167},[1086,1568,1569],{},"source myproject_env/Scripts/activate\n",[1086,1571,1572],{"class":1088,"line":1177},[1086,1573,1136],{"emptyLinePlaceholder":1135},[1086,1575,1576],{"class":1088,"line":1189},[1086,1577,1578],{},"# Deactivate (all platforms)\n",[1086,1580,1581],{"class":1088,"line":1194},[1086,1582,1519],{},[1035,1584,1586],{"id":1585},"environment-structure","Environment Structure",[1076,1588,1593],{"className":1589,"code":1591,"language":1592},[1590],"language-text","myproject_env/\n├── bin/                    # Linux/macOS executables\n│   ├── activate           # Activation script\n│   ├── activate.csh       # C shell activation\n│   ├── activate.fish      # Fish shell activation\n│   ├── pip               # Isolated pip\n│   └── python            # Python interpreter\n├── Scripts/               # Windows executables\n│   ├── activate.bat      # Batch activation\n│   ├── Activate.ps1      # PowerShell activation\n│   ├── pip.exe          # Isolated pip\n│   └── python.exe       # Python interpreter\n├── include/              # C headers\n├── lib/                  # Python libraries\n│   └── python3.x/\n│       └── site-packages/  # Installed packages\n└── pyvenv.cfg           # Environment configuration\n","text",[1083,1594,1591],{"__ignoreMap":1081},[1030,1596,1598],{"id":1597},"advanced-virtual-environment-tools","Advanced Virtual Environment Tools",[1035,1600,1602],{"id":1601},"virtualenv-third-party","virtualenv (Third-party)",[1026,1604,1605],{},[1049,1606,1607],{},"Installation and Usage:",[1076,1609,1611],{"className":1078,"code":1610,"language":1080,"meta":1081,"style":1081},"# Install virtualenv\npip install virtualenv\n\n# Create environment\nvirtualenv myproject_env\n\n# Create with specific Python version\nvirtualenv -p python3.11 myproject_env\n\n# Create with no site packages\nvirtualenv --no-site-packages myproject_env\n\n# List available Python interpreters\nvirtualenv --python=python3.11 myproject_env\n",[1083,1612,1613,1618,1627,1631,1636,1643,1647,1651,1663,1667,1672,1681,1685,1690],{"__ignoreMap":1081},[1086,1614,1615],{"class":1088,"line":1089},[1086,1616,1617],{"class":1092},"# Install virtualenv\n",[1086,1619,1620,1622,1624],{"class":1088,"line":1096},[1086,1621,1100],{"class":1099},[1086,1623,1104],{"class":1103},[1086,1625,1626],{"class":1103}," virtualenv\n",[1086,1628,1629],{"class":1088,"line":1117},[1086,1630,1136],{"emptyLinePlaceholder":1135},[1086,1632,1633],{"class":1088,"line":1132},[1086,1634,1635],{"class":1092},"# Create environment\n",[1086,1637,1638,1641],{"class":1088,"line":1139},[1086,1639,1640],{"class":1099},"virtualenv",[1086,1642,1263],{"class":1103},[1086,1644,1645],{"class":1088,"line":1145},[1086,1646,1136],{"emptyLinePlaceholder":1135},[1086,1648,1649],{"class":1088,"line":1151},[1086,1650,1342],{"class":1092},[1086,1652,1653,1655,1658,1661],{"class":1088,"line":1167},[1086,1654,1640],{"class":1099},[1086,1656,1657],{"class":1157}," -p",[1086,1659,1660],{"class":1103}," python3.11",[1086,1662,1263],{"class":1103},[1086,1664,1665],{"class":1088,"line":1177},[1086,1666,1136],{"emptyLinePlaceholder":1135},[1086,1668,1669],{"class":1088,"line":1189},[1086,1670,1671],{"class":1092},"# Create with no site packages\n",[1086,1673,1674,1676,1679],{"class":1088,"line":1194},[1086,1675,1640],{"class":1099},[1086,1677,1678],{"class":1157}," --no-site-packages",[1086,1680,1263],{"class":1103},[1086,1682,1683],{"class":1088,"line":1200},[1086,1684,1136],{"emptyLinePlaceholder":1135},[1086,1686,1687],{"class":1088,"line":1212},[1086,1688,1689],{"class":1092},"# List available Python interpreters\n",[1086,1691,1692,1694,1697],{"class":1088,"line":1220},[1086,1693,1640],{"class":1099},[1086,1695,1696],{"class":1157}," --python=python3.11",[1086,1698,1263],{"class":1103},[1026,1700,1701],{},[1049,1702,1703],{},"Advanced Features:",[1076,1705,1707],{"className":1078,"code":1706,"language":1080,"meta":1081,"style":1081},"# Download latest pip/setuptools/wheel\nvirtualenv --download myproject_env\n\n# Use specific pip version\nvirtualenv --pip=21.3.1 myproject_env\n\n# Relocatable environment\nvirtualenv --relocatable myproject_env\n\n# Verbose output\nvirtualenv --verbose myproject_env\n",[1083,1708,1709,1714,1723,1727,1732,1741,1745,1750,1759,1763,1768],{"__ignoreMap":1081},[1086,1710,1711],{"class":1088,"line":1089},[1086,1712,1713],{"class":1092},"# Download latest pip/setuptools/wheel\n",[1086,1715,1716,1718,1721],{"class":1088,"line":1096},[1086,1717,1640],{"class":1099},[1086,1719,1720],{"class":1157}," --download",[1086,1722,1263],{"class":1103},[1086,1724,1725],{"class":1088,"line":1117},[1086,1726,1136],{"emptyLinePlaceholder":1135},[1086,1728,1729],{"class":1088,"line":1132},[1086,1730,1731],{"class":1092},"# Use specific pip version\n",[1086,1733,1734,1736,1739],{"class":1088,"line":1139},[1086,1735,1640],{"class":1099},[1086,1737,1738],{"class":1157}," --pip=21.3.1",[1086,1740,1263],{"class":1103},[1086,1742,1743],{"class":1088,"line":1145},[1086,1744,1136],{"emptyLinePlaceholder":1135},[1086,1746,1747],{"class":1088,"line":1151},[1086,1748,1749],{"class":1092},"# Relocatable environment\n",[1086,1751,1752,1754,1757],{"class":1088,"line":1167},[1086,1753,1640],{"class":1099},[1086,1755,1756],{"class":1157}," --relocatable",[1086,1758,1263],{"class":1103},[1086,1760,1761],{"class":1088,"line":1177},[1086,1762,1136],{"emptyLinePlaceholder":1135},[1086,1764,1765],{"class":1088,"line":1189},[1086,1766,1767],{"class":1092},"# Verbose output\n",[1086,1769,1770,1772,1775],{"class":1088,"line":1194},[1086,1771,1640],{"class":1099},[1086,1773,1774],{"class":1157}," --verbose",[1086,1776,1263],{"class":1103},[1035,1778,1779],{"id":1779},"virtualenvwrapper",[1026,1781,1782],{},[1049,1783,1784],{},"Installation:",[1076,1786,1788],{"className":1078,"code":1787,"language":1080,"meta":1081,"style":1081},"pip install virtualenvwrapper\n\n# Add to shell profile (.bashrc, .zshrc, etc.)\nexport WORKON_HOME=$HOME/.virtualenvs\nexport PROJECT_HOME=$HOME/Projects\nsource /usr/local/bin/virtualenvwrapper.sh\n",[1083,1789,1790,1799,1803,1808,1832,1849],{"__ignoreMap":1081},[1086,1791,1792,1794,1796],{"class":1088,"line":1089},[1086,1793,1100],{"class":1099},[1086,1795,1104],{"class":1103},[1086,1797,1798],{"class":1103}," virtualenvwrapper\n",[1086,1800,1801],{"class":1088,"line":1096},[1086,1802,1136],{"emptyLinePlaceholder":1135},[1086,1804,1805],{"class":1088,"line":1117},[1086,1806,1807],{"class":1092},"# Add to shell profile (.bashrc, .zshrc, etc.)\n",[1086,1809,1810,1814,1818,1822,1825,1829],{"class":1088,"line":1132},[1086,1811,1813],{"class":1812},"s5Kfy","export",[1086,1815,1817],{"class":1816},"sSC40"," WORKON_HOME",[1086,1819,1821],{"class":1820},"soVBu","=",[1086,1823,1824],{"class":1816},"$HOME",[1086,1826,1828],{"class":1827},"sftqT","/.",[1086,1830,1831],{"class":1816},"virtualenvs\n",[1086,1833,1834,1836,1839,1841,1843,1846],{"class":1088,"line":1139},[1086,1835,1813],{"class":1812},[1086,1837,1838],{"class":1816}," PROJECT_HOME",[1086,1840,1821],{"class":1820},[1086,1842,1824],{"class":1816},[1086,1844,1845],{"class":1827},"/",[1086,1847,1848],{"class":1816},"Projects\n",[1086,1850,1851,1853],{"class":1088,"line":1145},[1086,1852,1171],{"class":1170},[1086,1854,1855],{"class":1103}," /usr/local/bin/virtualenvwrapper.sh\n",[1026,1857,1858],{},[1049,1859,1860],{},"Usage:",[1076,1862,1864],{"className":1078,"code":1863,"language":1080,"meta":1081,"style":1081},"# Create environment\nmkvirtualenv myproject\n\n# Work on environment\nworkon myproject\n\n# Deactivate\ndeactivate\n\n# Remove environment\nrmvirtualenv myproject\n\n# List environments\nlsvirtualenv\n\n# Navigate to project directory\ncdproject\n\n# Create temporary environment\nmktmpenv\n",[1083,1865,1866,1870,1878,1882,1887,1894,1898,1902,1906,1910,1915,1922,1926,1931,1936,1941,1947,1953,1958,1964],{"__ignoreMap":1081},[1086,1867,1868],{"class":1088,"line":1089},[1086,1869,1635],{"class":1092},[1086,1871,1872,1875],{"class":1088,"line":1096},[1086,1873,1874],{"class":1099},"mkvirtualenv",[1086,1876,1877],{"class":1103}," myproject\n",[1086,1879,1880],{"class":1088,"line":1117},[1086,1881,1136],{"emptyLinePlaceholder":1135},[1086,1883,1884],{"class":1088,"line":1132},[1086,1885,1886],{"class":1092},"# Work on environment\n",[1086,1888,1889,1892],{"class":1088,"line":1139},[1086,1890,1891],{"class":1099},"workon",[1086,1893,1877],{"class":1103},[1086,1895,1896],{"class":1088,"line":1145},[1086,1897,1136],{"emptyLinePlaceholder":1135},[1086,1899,1900],{"class":1088,"line":1151},[1086,1901,1514],{"class":1092},[1086,1903,1904],{"class":1088,"line":1167},[1086,1905,1519],{"class":1099},[1086,1907,1908],{"class":1088,"line":1177},[1086,1909,1136],{"emptyLinePlaceholder":1135},[1086,1911,1912],{"class":1088,"line":1189},[1086,1913,1914],{"class":1092},"# Remove environment\n",[1086,1916,1917,1920],{"class":1088,"line":1194},[1086,1918,1919],{"class":1099},"rmvirtualenv",[1086,1921,1877],{"class":1103},[1086,1923,1924],{"class":1088,"line":1200},[1086,1925,1136],{"emptyLinePlaceholder":1135},[1086,1927,1928],{"class":1088,"line":1212},[1086,1929,1930],{"class":1092},"# List environments\n",[1086,1932,1933],{"class":1088,"line":1220},[1086,1934,1935],{"class":1099},"lsvirtualenv\n",[1086,1937,1939],{"class":1088,"line":1938},15,[1086,1940,1136],{"emptyLinePlaceholder":1135},[1086,1942,1944],{"class":1088,"line":1943},16,[1086,1945,1946],{"class":1092},"# Navigate to project directory\n",[1086,1948,1950],{"class":1088,"line":1949},17,[1086,1951,1952],{"class":1099},"cdproject\n",[1086,1954,1956],{"class":1088,"line":1955},18,[1086,1957,1136],{"emptyLinePlaceholder":1135},[1086,1959,1961],{"class":1088,"line":1960},19,[1086,1962,1963],{"class":1092},"# Create temporary environment\n",[1086,1965,1967],{"class":1088,"line":1966},20,[1086,1968,1969],{"class":1099},"mktmpenv\n",[1026,1971,1972],{},[1049,1973,1974],{},"Project Integration:",[1076,1976,1978],{"className":1078,"code":1977,"language":1080,"meta":1081,"style":1081},"# Create environment and associate with project\nmkproject myproject\n# This creates environment AND project directory\n\n# Set project directory for existing environment\nworkon myproject\ncd /path/to/project\nsetvirtualenvproject\n\n# Automatic activation when entering directory\ncd /path/to/project  # Automatically activates environment\n",[1083,1979,1980,1985,1992,1997,2001,2006,2012,2020,2025,2029,2034],{"__ignoreMap":1081},[1086,1981,1982],{"class":1088,"line":1089},[1086,1983,1984],{"class":1092},"# Create environment and associate with project\n",[1086,1986,1987,1990],{"class":1088,"line":1096},[1086,1988,1989],{"class":1099},"mkproject",[1086,1991,1877],{"class":1103},[1086,1993,1994],{"class":1088,"line":1117},[1086,1995,1996],{"class":1092},"# This creates environment AND project directory\n",[1086,1998,1999],{"class":1088,"line":1132},[1086,2000,1136],{"emptyLinePlaceholder":1135},[1086,2002,2003],{"class":1088,"line":1139},[1086,2004,2005],{"class":1092},"# Set project directory for existing environment\n",[1086,2007,2008,2010],{"class":1088,"line":1145},[1086,2009,1891],{"class":1099},[1086,2011,1877],{"class":1103},[1086,2013,2014,2017],{"class":1088,"line":1151},[1086,2015,2016],{"class":1170},"cd",[1086,2018,2019],{"class":1103}," /path/to/project\n",[1086,2021,2022],{"class":1088,"line":1167},[1086,2023,2024],{"class":1099},"setvirtualenvproject\n",[1086,2026,2027],{"class":1088,"line":1177},[1086,2028,1136],{"emptyLinePlaceholder":1135},[1086,2030,2031],{"class":1088,"line":1189},[1086,2032,2033],{"class":1092},"# Automatic activation when entering directory\n",[1086,2035,2036,2038,2041],{"class":1088,"line":1194},[1086,2037,2016],{"class":1170},[1086,2039,2040],{"class":1103}," /path/to/project",[1086,2042,2043],{"class":1092},"  # Automatically activates environment\n",[1035,2045,2047],{"id":2046},"conda-anacondaminiconda","conda (Anaconda/Miniconda)",[1026,2049,2050],{},[1049,2051,1784],{},[1076,2053,2055],{"className":1078,"code":2054,"language":1080,"meta":1081,"style":1081},"# Download and install Miniconda\nwget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh\nbash Miniconda3-latest-Linux-x86_64.sh\n\n# Or use package manager\nbrew install miniconda  # macOS\n",[1083,2056,2057,2062,2070,2077,2081,2086],{"__ignoreMap":1081},[1086,2058,2059],{"class":1088,"line":1089},[1086,2060,2061],{"class":1092},"# Download and install Miniconda\n",[1086,2063,2064,2067],{"class":1088,"line":1096},[1086,2065,2066],{"class":1099},"wget",[1086,2068,2069],{"class":1103}," https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh\n",[1086,2071,2072,2074],{"class":1088,"line":1117},[1086,2073,1080],{"class":1099},[1086,2075,2076],{"class":1103}," Miniconda3-latest-Linux-x86_64.sh\n",[1086,2078,2079],{"class":1088,"line":1132},[1086,2080,1136],{"emptyLinePlaceholder":1135},[1086,2082,2083],{"class":1088,"line":1139},[1086,2084,2085],{"class":1092},"# Or use package manager\n",[1086,2087,2088,2091,2093,2096],{"class":1088,"line":1145},[1086,2089,2090],{"class":1099},"brew",[1086,2092,1104],{"class":1103},[1086,2094,2095],{"class":1103}," miniconda",[1086,2097,2098],{"class":1092},"  # macOS\n",[1026,2100,2101],{},[1049,2102,2103],{},"Environment Management:",[1076,2105,2107],{"className":1078,"code":2106,"language":1080,"meta":1081,"style":1081},"# Create environment with specific Python version\nconda create -n myproject python=3.11\n\n# Create with packages\nconda create -n myproject python=3.11 django psycopg2\n\n# Activate environment\nconda activate myproject\n\n# Deactivate\nconda deactivate\n\n# List environments\nconda env list\n\n# Remove environment\nconda env remove -n myproject\n\n# Export environment\nconda env export > environment.yml\n\n# Create from file\nconda env create -f environment.yml\n",[1083,2108,2109,2114,2134,2138,2143,2164,2168,2173,2182,2186,2190,2197,2201,2205,2214,2218,2222,2235,2239,2244,2260,2265,2271],{"__ignoreMap":1081},[1086,2110,2111],{"class":1088,"line":1089},[1086,2112,2113],{"class":1092},"# Create environment with specific Python version\n",[1086,2115,2116,2119,2122,2125,2128,2131],{"class":1088,"line":1096},[1086,2117,2118],{"class":1099},"conda",[1086,2120,2121],{"class":1103}," create",[1086,2123,2124],{"class":1157}," -n",[1086,2126,2127],{"class":1103}," myproject",[1086,2129,2130],{"class":1103}," python=",[1086,2132,2133],{"class":1110},"3.11\n",[1086,2135,2136],{"class":1088,"line":1117},[1086,2137,1136],{"emptyLinePlaceholder":1135},[1086,2139,2140],{"class":1088,"line":1132},[1086,2141,2142],{"class":1092},"# Create with packages\n",[1086,2144,2145,2147,2149,2151,2153,2155,2158,2161],{"class":1088,"line":1139},[1086,2146,2118],{"class":1099},[1086,2148,2121],{"class":1103},[1086,2150,2124],{"class":1157},[1086,2152,2127],{"class":1103},[1086,2154,2130],{"class":1103},[1086,2156,2157],{"class":1110},"3.11",[1086,2159,2160],{"class":1103}," django",[1086,2162,2163],{"class":1103}," psycopg2\n",[1086,2165,2166],{"class":1088,"line":1145},[1086,2167,1136],{"emptyLinePlaceholder":1135},[1086,2169,2170],{"class":1088,"line":1151},[1086,2171,2172],{"class":1092},"# Activate environment\n",[1086,2174,2175,2177,2180],{"class":1088,"line":1167},[1086,2176,2118],{"class":1099},[1086,2178,2179],{"class":1103}," activate",[1086,2181,1877],{"class":1103},[1086,2183,2184],{"class":1088,"line":1177},[1086,2185,1136],{"emptyLinePlaceholder":1135},[1086,2187,2188],{"class":1088,"line":1189},[1086,2189,1514],{"class":1092},[1086,2191,2192,2194],{"class":1088,"line":1194},[1086,2193,2118],{"class":1099},[1086,2195,2196],{"class":1103}," deactivate\n",[1086,2198,2199],{"class":1088,"line":1200},[1086,2200,1136],{"emptyLinePlaceholder":1135},[1086,2202,2203],{"class":1088,"line":1212},[1086,2204,1930],{"class":1092},[1086,2206,2207,2209,2211],{"class":1088,"line":1220},[1086,2208,2118],{"class":1099},[1086,2210,1310],{"class":1103},[1086,2212,2213],{"class":1103}," list\n",[1086,2215,2216],{"class":1088,"line":1938},[1086,2217,1136],{"emptyLinePlaceholder":1135},[1086,2219,2220],{"class":1088,"line":1943},[1086,2221,1914],{"class":1092},[1086,2223,2224,2226,2228,2231,2233],{"class":1088,"line":1949},[1086,2225,2118],{"class":1099},[1086,2227,1310],{"class":1103},[1086,2229,2230],{"class":1103}," remove",[1086,2232,2124],{"class":1157},[1086,2234,1877],{"class":1103},[1086,2236,2237],{"class":1088,"line":1955},[1086,2238,1136],{"emptyLinePlaceholder":1135},[1086,2240,2241],{"class":1088,"line":1960},[1086,2242,2243],{"class":1092},"# Export environment\n",[1086,2245,2246,2248,2250,2253,2257],{"class":1088,"line":1966},[1086,2247,2118],{"class":1099},[1086,2249,1310],{"class":1103},[1086,2251,2252],{"class":1103}," export",[1086,2254,2256],{"class":2255},"sVsLi"," >",[1086,2258,2259],{"class":1103}," environment.yml\n",[1086,2261,2263],{"class":1088,"line":2262},21,[1086,2264,1136],{"emptyLinePlaceholder":1135},[1086,2266,2268],{"class":1088,"line":2267},22,[1086,2269,2270],{"class":1092},"# Create from file\n",[1086,2272,2274,2276,2278,2280,2283],{"class":1088,"line":2273},23,[1086,2275,2118],{"class":1099},[1086,2277,1310],{"class":1103},[1086,2279,2121],{"class":1103},[1086,2281,2282],{"class":1157}," -f",[1086,2284,2259],{"class":1103},[1026,2286,2287],{},[1049,2288,2289],{},"environment.yml Example:",[1076,2291,2295],{"className":2292,"code":2293,"language":2294,"meta":1081,"style":1081},"language-yaml shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","name: myproject\nchannels:\n  - conda-forge\n  - defaults\ndependencies:\n  - python=3.11\n  - pip\n  - pip:\n    - django>=4.2,\u003C5.0\n    - psycopg2-binary\n    - python-decouple\n    - django-debug-toolbar\n","yaml",[1083,2296,2297,2308,2316,2324,2331,2338,2345,2352,2361,2369,2376,2383],{"__ignoreMap":1081},[1086,2298,2299,2303,2306],{"class":1088,"line":1089},[1086,2300,2302],{"class":2301},"suXOh","name",[1086,2304,2305],{"class":1820},":",[1086,2307,1877],{"class":1103},[1086,2309,2310,2313],{"class":1088,"line":1096},[1086,2311,2312],{"class":2301},"channels",[1086,2314,2315],{"class":1820},":\n",[1086,2317,2318,2321],{"class":1088,"line":1117},[1086,2319,2320],{"class":1820},"  -",[1086,2322,2323],{"class":1103}," conda-forge\n",[1086,2325,2326,2328],{"class":1088,"line":1132},[1086,2327,2320],{"class":1820},[1086,2329,2330],{"class":1103}," defaults\n",[1086,2332,2333,2336],{"class":1088,"line":1139},[1086,2334,2335],{"class":2301},"dependencies",[1086,2337,2315],{"class":1820},[1086,2339,2340,2342],{"class":1088,"line":1145},[1086,2341,2320],{"class":1820},[1086,2343,2344],{"class":1103}," python=3.11\n",[1086,2346,2347,2349],{"class":1088,"line":1151},[1086,2348,2320],{"class":1820},[1086,2350,2351],{"class":1103}," pip\n",[1086,2353,2354,2356,2359],{"class":1088,"line":1167},[1086,2355,2320],{"class":1820},[1086,2357,2358],{"class":2301}," pip",[1086,2360,2315],{"class":1820},[1086,2362,2363,2366],{"class":1088,"line":1177},[1086,2364,2365],{"class":1820},"    -",[1086,2367,2368],{"class":1103}," django>=4.2,\u003C5.0\n",[1086,2370,2371,2373],{"class":1088,"line":1189},[1086,2372,2365],{"class":1820},[1086,2374,2375],{"class":1103}," psycopg2-binary\n",[1086,2377,2378,2380],{"class":1088,"line":1194},[1086,2379,2365],{"class":1820},[1086,2381,2382],{"class":1103}," python-decouple\n",[1086,2384,2385,2387],{"class":1088,"line":1200},[1086,2386,2365],{"class":1820},[1086,2388,2389],{"class":1103}," django-debug-toolbar\n",[1030,2391,2393],{"id":2392},"modern-package-managers","Modern Package Managers",[1035,2395,2396],{"id":2396},"pipenv",[1026,2398,2399],{},[1049,2400,1784],{},[1076,2402,2404],{"className":1078,"code":2403,"language":1080,"meta":1081,"style":1081},"pip install pipenv\n",[1083,2405,2406],{"__ignoreMap":1081},[1086,2407,2408,2410,2412],{"class":1088,"line":1089},[1086,2409,1100],{"class":1099},[1086,2411,1104],{"class":1103},[1086,2413,2414],{"class":1103}," pipenv\n",[1026,2416,2417],{},[1049,2418,2419],{},"Project Setup:",[1076,2421,2423],{"className":1078,"code":2422,"language":1080,"meta":1081,"style":1081},"# Initialize project\ncd myproject\npipenv install\n\n# Install Django\npipenv install django\n\n# Install development dependencies\npipenv install pytest --dev\n\n# Install from requirements.txt\npipenv install -r requirements.txt\n\n# Generate Pipfile.lock\npipenv lock\n\n# Install from Pipfile\npipenv install --dev  # Include dev dependencies\n",[1083,2424,2425,2430,2436,2443,2447,2452,2461,2465,2470,2482,2486,2491,2503,2507,2512,2519,2523,2528],{"__ignoreMap":1081},[1086,2426,2427],{"class":1088,"line":1089},[1086,2428,2429],{"class":1092},"# Initialize project\n",[1086,2431,2432,2434],{"class":1088,"line":1096},[1086,2433,2016],{"class":1170},[1086,2435,1877],{"class":1103},[1086,2437,2438,2440],{"class":1088,"line":1117},[1086,2439,2396],{"class":1099},[1086,2441,2442],{"class":1103}," install\n",[1086,2444,2445],{"class":1088,"line":1132},[1086,2446,1136],{"emptyLinePlaceholder":1135},[1086,2448,2449],{"class":1088,"line":1139},[1086,2450,2451],{"class":1092},"# Install Django\n",[1086,2453,2454,2456,2458],{"class":1088,"line":1145},[1086,2455,2396],{"class":1099},[1086,2457,1104],{"class":1103},[1086,2459,2460],{"class":1103}," django\n",[1086,2462,2463],{"class":1088,"line":1151},[1086,2464,1136],{"emptyLinePlaceholder":1135},[1086,2466,2467],{"class":1088,"line":1167},[1086,2468,2469],{"class":1092},"# Install development dependencies\n",[1086,2471,2472,2474,2476,2479],{"class":1088,"line":1177},[1086,2473,2396],{"class":1099},[1086,2475,1104],{"class":1103},[1086,2477,2478],{"class":1103}," pytest",[1086,2480,2481],{"class":1157}," --dev\n",[1086,2483,2484],{"class":1088,"line":1189},[1086,2485,1136],{"emptyLinePlaceholder":1135},[1086,2487,2488],{"class":1088,"line":1194},[1086,2489,2490],{"class":1092},"# Install from requirements.txt\n",[1086,2492,2493,2495,2497,2500],{"class":1088,"line":1200},[1086,2494,2396],{"class":1099},[1086,2496,1104],{"class":1103},[1086,2498,2499],{"class":1157}," -r",[1086,2501,2502],{"class":1103}," requirements.txt\n",[1086,2504,2505],{"class":1088,"line":1212},[1086,2506,1136],{"emptyLinePlaceholder":1135},[1086,2508,2509],{"class":1088,"line":1220},[1086,2510,2511],{"class":1092},"# Generate Pipfile.lock\n",[1086,2513,2514,2516],{"class":1088,"line":1938},[1086,2515,2396],{"class":1099},[1086,2517,2518],{"class":1103}," lock\n",[1086,2520,2521],{"class":1088,"line":1943},[1086,2522,1136],{"emptyLinePlaceholder":1135},[1086,2524,2525],{"class":1088,"line":1949},[1086,2526,2527],{"class":1092},"# Install from Pipfile\n",[1086,2529,2530,2532,2534,2537],{"class":1088,"line":1955},[1086,2531,2396],{"class":1099},[1086,2533,1104],{"class":1103},[1086,2535,2536],{"class":1157}," --dev",[1086,2538,2539],{"class":1092},"  # Include dev dependencies\n",[1026,2541,2542],{},[1049,2543,2544],{},"Pipfile Example:",[1076,2546,2550],{"className":2547,"code":2548,"language":2549,"meta":1081,"style":1081},"language-toml shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","[[source]]\nurl = \"https://pypi.org/simple\"\nverify_ssl = true\nname = \"pypi\"\n\n[packages]\ndjango = \">=4.2,\u003C5.0\"\npsycopg2-binary = \"*\"\npython-decouple = \"*\"\ngunicorn = \"*\"\n\n[dev-packages]\npytest = \"*\"\npytest-django = \"*\"\nblack = \"*\"\nflake8 = \"*\"\ndjango-debug-toolbar = \"*\"\n\n[requires]\npython_version = \"3.11\"\n\n[scripts]\nserver = \"python manage.py runserver\"\ntest = \"pytest\"\nmigrate = \"python manage.py migrate\"\n","toml",[1083,2551,2552,2562,2580,2591,2604,2608,2619,2633,2647,2660,2673,2677,2686,2699,2712,2725,2738,2751,2755,2764,2777,2781,2790,2804,2818],{"__ignoreMap":1081},[1086,2553,2554,2557,2559],{"class":1088,"line":1089},[1086,2555,2556],{"class":1820},"[[",[1086,2558,1171],{"class":1099},[1086,2560,2561],{"class":1820},"]]\n",[1086,2563,2564,2567,2570,2574,2577],{"class":1088,"line":1096},[1086,2565,2566],{"class":1816},"url",[1086,2568,2569],{"class":1820}," =",[1086,2571,2573],{"class":2572},"sbYkP"," \"",[1086,2575,2576],{"class":1103},"https://pypi.org/simple",[1086,2578,2579],{"class":2572},"\"\n",[1086,2581,2582,2585,2587],{"class":1088,"line":1117},[1086,2583,2584],{"class":1816},"verify_ssl",[1086,2586,2569],{"class":1820},[1086,2588,2590],{"class":2589},"sq3J1"," true\n",[1086,2592,2593,2595,2597,2599,2602],{"class":1088,"line":1132},[1086,2594,2302],{"class":1816},[1086,2596,2569],{"class":1820},[1086,2598,2573],{"class":2572},[1086,2600,2601],{"class":1103},"pypi",[1086,2603,2579],{"class":2572},[1086,2605,2606],{"class":1088,"line":1139},[1086,2607,1136],{"emptyLinePlaceholder":1135},[1086,2609,2610,2613,2616],{"class":1088,"line":1145},[1086,2611,2612],{"class":1820},"[",[1086,2614,2615],{"class":1099},"packages",[1086,2617,2618],{"class":1820},"]\n",[1086,2620,2621,2624,2626,2628,2631],{"class":1088,"line":1151},[1086,2622,2623],{"class":1816},"django",[1086,2625,2569],{"class":1820},[1086,2627,2573],{"class":2572},[1086,2629,2630],{"class":1103},">=4.2,\u003C5.0",[1086,2632,2579],{"class":2572},[1086,2634,2635,2638,2640,2642,2645],{"class":1088,"line":1167},[1086,2636,2637],{"class":1816},"psycopg2-binary",[1086,2639,2569],{"class":1820},[1086,2641,2573],{"class":2572},[1086,2643,2644],{"class":1103},"*",[1086,2646,2579],{"class":2572},[1086,2648,2649,2652,2654,2656,2658],{"class":1088,"line":1177},[1086,2650,2651],{"class":1816},"python-decouple",[1086,2653,2569],{"class":1820},[1086,2655,2573],{"class":2572},[1086,2657,2644],{"class":1103},[1086,2659,2579],{"class":2572},[1086,2661,2662,2665,2667,2669,2671],{"class":1088,"line":1189},[1086,2663,2664],{"class":1816},"gunicorn",[1086,2666,2569],{"class":1820},[1086,2668,2573],{"class":2572},[1086,2670,2644],{"class":1103},[1086,2672,2579],{"class":2572},[1086,2674,2675],{"class":1088,"line":1194},[1086,2676,1136],{"emptyLinePlaceholder":1135},[1086,2678,2679,2681,2684],{"class":1088,"line":1200},[1086,2680,2612],{"class":1820},[1086,2682,2683],{"class":1099},"dev-packages",[1086,2685,2618],{"class":1820},[1086,2687,2688,2691,2693,2695,2697],{"class":1088,"line":1212},[1086,2689,2690],{"class":1816},"pytest",[1086,2692,2569],{"class":1820},[1086,2694,2573],{"class":2572},[1086,2696,2644],{"class":1103},[1086,2698,2579],{"class":2572},[1086,2700,2701,2704,2706,2708,2710],{"class":1088,"line":1220},[1086,2702,2703],{"class":1816},"pytest-django",[1086,2705,2569],{"class":1820},[1086,2707,2573],{"class":2572},[1086,2709,2644],{"class":1103},[1086,2711,2579],{"class":2572},[1086,2713,2714,2717,2719,2721,2723],{"class":1088,"line":1938},[1086,2715,2716],{"class":1816},"black",[1086,2718,2569],{"class":1820},[1086,2720,2573],{"class":2572},[1086,2722,2644],{"class":1103},[1086,2724,2579],{"class":2572},[1086,2726,2727,2730,2732,2734,2736],{"class":1088,"line":1943},[1086,2728,2729],{"class":1816},"flake8",[1086,2731,2569],{"class":1820},[1086,2733,2573],{"class":2572},[1086,2735,2644],{"class":1103},[1086,2737,2579],{"class":2572},[1086,2739,2740,2743,2745,2747,2749],{"class":1088,"line":1949},[1086,2741,2742],{"class":1816},"django-debug-toolbar",[1086,2744,2569],{"class":1820},[1086,2746,2573],{"class":2572},[1086,2748,2644],{"class":1103},[1086,2750,2579],{"class":2572},[1086,2752,2753],{"class":1088,"line":1955},[1086,2754,1136],{"emptyLinePlaceholder":1135},[1086,2756,2757,2759,2762],{"class":1088,"line":1960},[1086,2758,2612],{"class":1820},[1086,2760,2761],{"class":1099},"requires",[1086,2763,2618],{"class":1820},[1086,2765,2766,2769,2771,2773,2775],{"class":1088,"line":1966},[1086,2767,2768],{"class":1816},"python_version",[1086,2770,2569],{"class":1820},[1086,2772,2573],{"class":2572},[1086,2774,2157],{"class":1103},[1086,2776,2579],{"class":2572},[1086,2778,2779],{"class":1088,"line":2262},[1086,2780,1136],{"emptyLinePlaceholder":1135},[1086,2782,2783,2785,2788],{"class":1088,"line":2267},[1086,2784,2612],{"class":1820},[1086,2786,2787],{"class":1099},"scripts",[1086,2789,2618],{"class":1820},[1086,2791,2792,2795,2797,2799,2802],{"class":1088,"line":2273},[1086,2793,2794],{"class":1816},"server",[1086,2796,2569],{"class":1820},[1086,2798,2573],{"class":2572},[1086,2800,2801],{"class":1103},"python manage.py runserver",[1086,2803,2579],{"class":2572},[1086,2805,2807,2810,2812,2814,2816],{"class":1088,"line":2806},24,[1086,2808,2809],{"class":1816},"test",[1086,2811,2569],{"class":1820},[1086,2813,2573],{"class":2572},[1086,2815,2690],{"class":1103},[1086,2817,2579],{"class":2572},[1086,2819,2821,2824,2826,2828,2831],{"class":1088,"line":2820},25,[1086,2822,2823],{"class":1816},"migrate",[1086,2825,2569],{"class":1820},[1086,2827,2573],{"class":2572},[1086,2829,2830],{"class":1103},"python manage.py migrate",[1086,2832,2579],{"class":2572},[1026,2834,2835],{},[1049,2836,1860],{},[1076,2838,2840],{"className":1078,"code":2839,"language":1080,"meta":1081,"style":1081},"# Activate shell\npipenv shell\n\n# Run commands in environment\npipenv run python manage.py runserver\npipenv run pytest\n\n# Install packages\npipenv install requests\npipenv install --dev pytest\n\n# Update packages\npipenv update\n\n# Check security vulnerabilities\npipenv check\n\n# Generate requirements.txt\npipenv requirements > requirements.txt\npipenv requirements --dev > requirements-dev.txt\n",[1083,2841,2842,2847,2854,2858,2863,2879,2888,2892,2897,2906,2916,2920,2925,2932,2936,2941,2948,2952,2957,2968],{"__ignoreMap":1081},[1086,2843,2844],{"class":1088,"line":1089},[1086,2845,2846],{"class":1092},"# Activate shell\n",[1086,2848,2849,2851],{"class":1088,"line":1096},[1086,2850,2396],{"class":1099},[1086,2852,2853],{"class":1103}," shell\n",[1086,2855,2856],{"class":1088,"line":1117},[1086,2857,1136],{"emptyLinePlaceholder":1135},[1086,2859,2860],{"class":1088,"line":1132},[1086,2861,2862],{"class":1092},"# Run commands in environment\n",[1086,2864,2865,2867,2870,2873,2876],{"class":1088,"line":1139},[1086,2866,2396],{"class":1099},[1086,2868,2869],{"class":1103}," run",[1086,2871,2872],{"class":1103}," python",[1086,2874,2875],{"class":1103}," manage.py",[1086,2877,2878],{"class":1103}," runserver\n",[1086,2880,2881,2883,2885],{"class":1088,"line":1145},[1086,2882,2396],{"class":1099},[1086,2884,2869],{"class":1103},[1086,2886,2887],{"class":1103}," pytest\n",[1086,2889,2890],{"class":1088,"line":1151},[1086,2891,1136],{"emptyLinePlaceholder":1135},[1086,2893,2894],{"class":1088,"line":1167},[1086,2895,2896],{"class":1092},"# Install packages\n",[1086,2898,2899,2901,2903],{"class":1088,"line":1177},[1086,2900,2396],{"class":1099},[1086,2902,1104],{"class":1103},[1086,2904,2905],{"class":1103}," requests\n",[1086,2907,2908,2910,2912,2914],{"class":1088,"line":1189},[1086,2909,2396],{"class":1099},[1086,2911,1104],{"class":1103},[1086,2913,2536],{"class":1157},[1086,2915,2887],{"class":1103},[1086,2917,2918],{"class":1088,"line":1194},[1086,2919,1136],{"emptyLinePlaceholder":1135},[1086,2921,2922],{"class":1088,"line":1200},[1086,2923,2924],{"class":1092},"# Update packages\n",[1086,2926,2927,2929],{"class":1088,"line":1212},[1086,2928,2396],{"class":1099},[1086,2930,2931],{"class":1103}," update\n",[1086,2933,2934],{"class":1088,"line":1220},[1086,2935,1136],{"emptyLinePlaceholder":1135},[1086,2937,2938],{"class":1088,"line":1938},[1086,2939,2940],{"class":1092},"# Check security vulnerabilities\n",[1086,2942,2943,2945],{"class":1088,"line":1943},[1086,2944,2396],{"class":1099},[1086,2946,2947],{"class":1103}," check\n",[1086,2949,2950],{"class":1088,"line":1949},[1086,2951,1136],{"emptyLinePlaceholder":1135},[1086,2953,2954],{"class":1088,"line":1955},[1086,2955,2956],{"class":1092},"# Generate requirements.txt\n",[1086,2958,2959,2961,2964,2966],{"class":1088,"line":1960},[1086,2960,2396],{"class":1099},[1086,2962,2963],{"class":1103}," requirements",[1086,2965,2256],{"class":2255},[1086,2967,2502],{"class":1103},[1086,2969,2970,2972,2974,2976,2978],{"class":1088,"line":1966},[1086,2971,2396],{"class":1099},[1086,2973,2963],{"class":1103},[1086,2975,2536],{"class":1157},[1086,2977,2256],{"class":2255},[1086,2979,2980],{"class":1103}," requirements-dev.txt\n",[1035,2982,2984],{"id":2983},"poetry","Poetry",[1026,2986,2987],{},[1049,2988,1784],{},[1076,2990,2992],{"className":1078,"code":2991,"language":1080,"meta":1081,"style":1081},"curl -sSL https://install.python-poetry.org | python3 -\n",[1083,2993,2994],{"__ignoreMap":1081},[1086,2995,2996,2999,3002,3005,3008,3011],{"class":1088,"line":1089},[1086,2997,2998],{"class":1099},"curl",[1086,3000,3001],{"class":1157}," -sSL",[1086,3003,3004],{"class":1103}," https://install.python-poetry.org",[1086,3006,3007],{"class":2255}," |",[1086,3009,3010],{"class":1099}," python3",[1086,3012,3013],{"class":1103}," -\n",[1026,3015,3016],{},[1049,3017,2419],{},[1076,3019,3021],{"className":1078,"code":3020,"language":1080,"meta":1081,"style":1081},"# Initialize new project\npoetry new myproject\ncd myproject\n\n# Initialize in existing directory\ncd existing_project\npoetry init\n\n# Add dependencies\npoetry add django\npoetry add pytest --group dev\n\n# Install dependencies\npoetry install\n\n# Install without dev dependencies\npoetry install --without dev\n",[1083,3022,3023,3028,3037,3043,3047,3052,3059,3066,3070,3075,3084,3098,3102,3107,3113,3117,3122],{"__ignoreMap":1081},[1086,3024,3025],{"class":1088,"line":1089},[1086,3026,3027],{"class":1092},"# Initialize new project\n",[1086,3029,3030,3032,3035],{"class":1088,"line":1096},[1086,3031,2983],{"class":1099},[1086,3033,3034],{"class":1103}," new",[1086,3036,1877],{"class":1103},[1086,3038,3039,3041],{"class":1088,"line":1117},[1086,3040,2016],{"class":1170},[1086,3042,1877],{"class":1103},[1086,3044,3045],{"class":1088,"line":1132},[1086,3046,1136],{"emptyLinePlaceholder":1135},[1086,3048,3049],{"class":1088,"line":1139},[1086,3050,3051],{"class":1092},"# Initialize in existing directory\n",[1086,3053,3054,3056],{"class":1088,"line":1145},[1086,3055,2016],{"class":1170},[1086,3057,3058],{"class":1103}," existing_project\n",[1086,3060,3061,3063],{"class":1088,"line":1151},[1086,3062,2983],{"class":1099},[1086,3064,3065],{"class":1103}," init\n",[1086,3067,3068],{"class":1088,"line":1167},[1086,3069,1136],{"emptyLinePlaceholder":1135},[1086,3071,3072],{"class":1088,"line":1177},[1086,3073,3074],{"class":1092},"# Add dependencies\n",[1086,3076,3077,3079,3082],{"class":1088,"line":1189},[1086,3078,2983],{"class":1099},[1086,3080,3081],{"class":1103}," add",[1086,3083,2460],{"class":1103},[1086,3085,3086,3088,3090,3092,3095],{"class":1088,"line":1194},[1086,3087,2983],{"class":1099},[1086,3089,3081],{"class":1103},[1086,3091,2478],{"class":1103},[1086,3093,3094],{"class":1157}," --group",[1086,3096,3097],{"class":1103}," dev\n",[1086,3099,3100],{"class":1088,"line":1200},[1086,3101,1136],{"emptyLinePlaceholder":1135},[1086,3103,3104],{"class":1088,"line":1212},[1086,3105,3106],{"class":1092},"# Install dependencies\n",[1086,3108,3109,3111],{"class":1088,"line":1220},[1086,3110,2983],{"class":1099},[1086,3112,2442],{"class":1103},[1086,3114,3115],{"class":1088,"line":1938},[1086,3116,1136],{"emptyLinePlaceholder":1135},[1086,3118,3119],{"class":1088,"line":1943},[1086,3120,3121],{"class":1092},"# Install without dev dependencies\n",[1086,3123,3124,3126,3128,3131],{"class":1088,"line":1949},[1086,3125,2983],{"class":1099},[1086,3127,1104],{"class":1103},[1086,3129,3130],{"class":1157}," --without",[1086,3132,3097],{"class":1103},[1026,3134,3135],{},[1049,3136,3137],{},"pyproject.toml Example:",[1076,3139,3141],{"className":2547,"code":3140,"language":2549,"meta":1081,"style":1081},"[tool.poetry]\nname = \"myproject\"\nversion = \"0.1.0\"\ndescription = \"Django project with Poetry\"\nauthors = [\"Your Name \u003Cyou@example.com>\"]\nreadme = \"README.md\"\n\n[tool.poetry.dependencies]\npython = \"^3.11\"\ndjango = \"^4.2\"\npsycopg2-binary = \"^2.9\"\npython-decouple = \"^3.8\"\ngunicorn = \"^21.2\"\n\n[tool.poetry.group.dev.dependencies]\npytest = \"^7.4\"\npytest-django = \"^4.5\"\nblack = \"^23.9\"\nflake8 = \"^6.1\"\ndjango-debug-toolbar = \"^4.2\"\nmypy = \"^1.6\"\n\n[tool.poetry.scripts]\nserver = \"python manage.py runserver\"\ntest = \"pytest\"\nmigrate = \"python manage.py migrate\"\n\n[build-system]\nrequires = [\"poetry-core\"]\nbuild-backend = \"poetry.core.masonry.api\"\n",[1083,3142,3143,3157,3170,3184,3198,3218,3232,3236,3252,3265,3278,3291,3304,3317,3321,3347,3360,3373,3386,3399,3411,3425,3429,3445,3457,3469,3482,3487,3497,3515],{"__ignoreMap":1081},[1086,3144,3145,3147,3150,3153,3155],{"class":1088,"line":1089},[1086,3146,2612],{"class":1820},[1086,3148,3149],{"class":1099},"tool",[1086,3151,3152],{"class":1827},".",[1086,3154,2983],{"class":1099},[1086,3156,2618],{"class":1820},[1086,3158,3159,3161,3163,3165,3168],{"class":1088,"line":1096},[1086,3160,2302],{"class":1816},[1086,3162,2569],{"class":1820},[1086,3164,2573],{"class":2572},[1086,3166,3167],{"class":1103},"myproject",[1086,3169,2579],{"class":2572},[1086,3171,3172,3175,3177,3179,3182],{"class":1088,"line":1117},[1086,3173,3174],{"class":1816},"version",[1086,3176,2569],{"class":1820},[1086,3178,2573],{"class":2572},[1086,3180,3181],{"class":1103},"0.1.0",[1086,3183,2579],{"class":2572},[1086,3185,3186,3189,3191,3193,3196],{"class":1088,"line":1132},[1086,3187,3188],{"class":1816},"description",[1086,3190,2569],{"class":1820},[1086,3192,2573],{"class":2572},[1086,3194,3195],{"class":1103},"Django project with Poetry",[1086,3197,2579],{"class":2572},[1086,3199,3200,3203,3205,3208,3211,3214,3216],{"class":1088,"line":1139},[1086,3201,3202],{"class":1816},"authors",[1086,3204,2569],{"class":1820},[1086,3206,3207],{"class":1820}," [",[1086,3209,3210],{"class":2572},"\"",[1086,3212,3213],{"class":1103},"Your Name \u003Cyou@example.com>",[1086,3215,3210],{"class":2572},[1086,3217,2618],{"class":1820},[1086,3219,3220,3223,3225,3227,3230],{"class":1088,"line":1145},[1086,3221,3222],{"class":1816},"readme",[1086,3224,2569],{"class":1820},[1086,3226,2573],{"class":2572},[1086,3228,3229],{"class":1103},"README.md",[1086,3231,2579],{"class":2572},[1086,3233,3234],{"class":1088,"line":1151},[1086,3235,1136],{"emptyLinePlaceholder":1135},[1086,3237,3238,3240,3242,3244,3246,3248,3250],{"class":1088,"line":1167},[1086,3239,2612],{"class":1820},[1086,3241,3149],{"class":1099},[1086,3243,3152],{"class":1827},[1086,3245,2983],{"class":1099},[1086,3247,3152],{"class":1827},[1086,3249,2335],{"class":1099},[1086,3251,2618],{"class":1820},[1086,3253,3254,3256,3258,3260,3263],{"class":1088,"line":1177},[1086,3255,1154],{"class":1816},[1086,3257,2569],{"class":1820},[1086,3259,2573],{"class":2572},[1086,3261,3262],{"class":1103},"^3.11",[1086,3264,2579],{"class":2572},[1086,3266,3267,3269,3271,3273,3276],{"class":1088,"line":1189},[1086,3268,2623],{"class":1816},[1086,3270,2569],{"class":1820},[1086,3272,2573],{"class":2572},[1086,3274,3275],{"class":1103},"^4.2",[1086,3277,2579],{"class":2572},[1086,3279,3280,3282,3284,3286,3289],{"class":1088,"line":1194},[1086,3281,2637],{"class":1816},[1086,3283,2569],{"class":1820},[1086,3285,2573],{"class":2572},[1086,3287,3288],{"class":1103},"^2.9",[1086,3290,2579],{"class":2572},[1086,3292,3293,3295,3297,3299,3302],{"class":1088,"line":1200},[1086,3294,2651],{"class":1816},[1086,3296,2569],{"class":1820},[1086,3298,2573],{"class":2572},[1086,3300,3301],{"class":1103},"^3.8",[1086,3303,2579],{"class":2572},[1086,3305,3306,3308,3310,3312,3315],{"class":1088,"line":1212},[1086,3307,2664],{"class":1816},[1086,3309,2569],{"class":1820},[1086,3311,2573],{"class":2572},[1086,3313,3314],{"class":1103},"^21.2",[1086,3316,2579],{"class":2572},[1086,3318,3319],{"class":1088,"line":1220},[1086,3320,1136],{"emptyLinePlaceholder":1135},[1086,3322,3323,3325,3327,3329,3331,3333,3336,3338,3341,3343,3345],{"class":1088,"line":1938},[1086,3324,2612],{"class":1820},[1086,3326,3149],{"class":1099},[1086,3328,3152],{"class":1827},[1086,3330,2983],{"class":1099},[1086,3332,3152],{"class":1827},[1086,3334,3335],{"class":1099},"group",[1086,3337,3152],{"class":1827},[1086,3339,3340],{"class":1099},"dev",[1086,3342,3152],{"class":1827},[1086,3344,2335],{"class":1099},[1086,3346,2618],{"class":1820},[1086,3348,3349,3351,3353,3355,3358],{"class":1088,"line":1943},[1086,3350,2690],{"class":1816},[1086,3352,2569],{"class":1820},[1086,3354,2573],{"class":2572},[1086,3356,3357],{"class":1103},"^7.4",[1086,3359,2579],{"class":2572},[1086,3361,3362,3364,3366,3368,3371],{"class":1088,"line":1949},[1086,3363,2703],{"class":1816},[1086,3365,2569],{"class":1820},[1086,3367,2573],{"class":2572},[1086,3369,3370],{"class":1103},"^4.5",[1086,3372,2579],{"class":2572},[1086,3374,3375,3377,3379,3381,3384],{"class":1088,"line":1955},[1086,3376,2716],{"class":1816},[1086,3378,2569],{"class":1820},[1086,3380,2573],{"class":2572},[1086,3382,3383],{"class":1103},"^23.9",[1086,3385,2579],{"class":2572},[1086,3387,3388,3390,3392,3394,3397],{"class":1088,"line":1960},[1086,3389,2729],{"class":1816},[1086,3391,2569],{"class":1820},[1086,3393,2573],{"class":2572},[1086,3395,3396],{"class":1103},"^6.1",[1086,3398,2579],{"class":2572},[1086,3400,3401,3403,3405,3407,3409],{"class":1088,"line":1966},[1086,3402,2742],{"class":1816},[1086,3404,2569],{"class":1820},[1086,3406,2573],{"class":2572},[1086,3408,3275],{"class":1103},[1086,3410,2579],{"class":2572},[1086,3412,3413,3416,3418,3420,3423],{"class":1088,"line":2262},[1086,3414,3415],{"class":1816},"mypy",[1086,3417,2569],{"class":1820},[1086,3419,2573],{"class":2572},[1086,3421,3422],{"class":1103},"^1.6",[1086,3424,2579],{"class":2572},[1086,3426,3427],{"class":1088,"line":2267},[1086,3428,1136],{"emptyLinePlaceholder":1135},[1086,3430,3431,3433,3435,3437,3439,3441,3443],{"class":1088,"line":2273},[1086,3432,2612],{"class":1820},[1086,3434,3149],{"class":1099},[1086,3436,3152],{"class":1827},[1086,3438,2983],{"class":1099},[1086,3440,3152],{"class":1827},[1086,3442,2787],{"class":1099},[1086,3444,2618],{"class":1820},[1086,3446,3447,3449,3451,3453,3455],{"class":1088,"line":2806},[1086,3448,2794],{"class":1816},[1086,3450,2569],{"class":1820},[1086,3452,2573],{"class":2572},[1086,3454,2801],{"class":1103},[1086,3456,2579],{"class":2572},[1086,3458,3459,3461,3463,3465,3467],{"class":1088,"line":2820},[1086,3460,2809],{"class":1816},[1086,3462,2569],{"class":1820},[1086,3464,2573],{"class":2572},[1086,3466,2690],{"class":1103},[1086,3468,2579],{"class":2572},[1086,3470,3472,3474,3476,3478,3480],{"class":1088,"line":3471},26,[1086,3473,2823],{"class":1816},[1086,3475,2569],{"class":1820},[1086,3477,2573],{"class":2572},[1086,3479,2830],{"class":1103},[1086,3481,2579],{"class":2572},[1086,3483,3485],{"class":1088,"line":3484},27,[1086,3486,1136],{"emptyLinePlaceholder":1135},[1086,3488,3490,3492,3495],{"class":1088,"line":3489},28,[1086,3491,2612],{"class":1820},[1086,3493,3494],{"class":1099},"build-system",[1086,3496,2618],{"class":1820},[1086,3498,3500,3502,3504,3506,3508,3511,3513],{"class":1088,"line":3499},29,[1086,3501,2761],{"class":1816},[1086,3503,2569],{"class":1820},[1086,3505,3207],{"class":1820},[1086,3507,3210],{"class":2572},[1086,3509,3510],{"class":1103},"poetry-core",[1086,3512,3210],{"class":2572},[1086,3514,2618],{"class":1820},[1086,3516,3518,3521,3523,3525,3528],{"class":1088,"line":3517},30,[1086,3519,3520],{"class":1816},"build-backend",[1086,3522,2569],{"class":1820},[1086,3524,2573],{"class":2572},[1086,3526,3527],{"class":1103},"poetry.core.masonry.api",[1086,3529,2579],{"class":2572},[1026,3531,3532],{},[1049,3533,1860],{},[1076,3535,3537],{"className":1078,"code":3536,"language":1080,"meta":1081,"style":1081},"# Activate shell\npoetry shell\n\n# Run commands\npoetry run python manage.py runserver\npoetry run pytest\n\n# Update dependencies\npoetry update\n\n# Show dependency tree\npoetry show --tree\n\n# Export requirements\npoetry export -f requirements.txt --output requirements.txt\npoetry export --with dev -f requirements.txt --output requirements-dev.txt\n",[1083,3538,3539,3543,3549,3553,3558,3570,3578,3582,3587,3593,3597,3602,3612,3616,3621,3637],{"__ignoreMap":1081},[1086,3540,3541],{"class":1088,"line":1089},[1086,3542,2846],{"class":1092},[1086,3544,3545,3547],{"class":1088,"line":1096},[1086,3546,2983],{"class":1099},[1086,3548,2853],{"class":1103},[1086,3550,3551],{"class":1088,"line":1117},[1086,3552,1136],{"emptyLinePlaceholder":1135},[1086,3554,3555],{"class":1088,"line":1132},[1086,3556,3557],{"class":1092},"# Run commands\n",[1086,3559,3560,3562,3564,3566,3568],{"class":1088,"line":1139},[1086,3561,2983],{"class":1099},[1086,3563,2869],{"class":1103},[1086,3565,2872],{"class":1103},[1086,3567,2875],{"class":1103},[1086,3569,2878],{"class":1103},[1086,3571,3572,3574,3576],{"class":1088,"line":1145},[1086,3573,2983],{"class":1099},[1086,3575,2869],{"class":1103},[1086,3577,2887],{"class":1103},[1086,3579,3580],{"class":1088,"line":1151},[1086,3581,1136],{"emptyLinePlaceholder":1135},[1086,3583,3584],{"class":1088,"line":1167},[1086,3585,3586],{"class":1092},"# Update dependencies\n",[1086,3588,3589,3591],{"class":1088,"line":1177},[1086,3590,2983],{"class":1099},[1086,3592,2931],{"class":1103},[1086,3594,3595],{"class":1088,"line":1189},[1086,3596,1136],{"emptyLinePlaceholder":1135},[1086,3598,3599],{"class":1088,"line":1194},[1086,3600,3601],{"class":1092},"# Show dependency tree\n",[1086,3603,3604,3606,3609],{"class":1088,"line":1200},[1086,3605,2983],{"class":1099},[1086,3607,3608],{"class":1103}," show",[1086,3610,3611],{"class":1157}," --tree\n",[1086,3613,3614],{"class":1088,"line":1212},[1086,3615,1136],{"emptyLinePlaceholder":1135},[1086,3617,3618],{"class":1088,"line":1220},[1086,3619,3620],{"class":1092},"# Export requirements\n",[1086,3622,3623,3625,3627,3629,3632,3635],{"class":1088,"line":1938},[1086,3624,2983],{"class":1099},[1086,3626,2252],{"class":1103},[1086,3628,2282],{"class":1157},[1086,3630,3631],{"class":1103}," requirements.txt",[1086,3633,3634],{"class":1157}," --output",[1086,3636,2502],{"class":1103},[1086,3638,3639,3641,3643,3646,3649,3651,3653,3655],{"class":1088,"line":1943},[1086,3640,2983],{"class":1099},[1086,3642,2252],{"class":1103},[1086,3644,3645],{"class":1157}," --with",[1086,3647,3648],{"class":1103}," dev",[1086,3650,2282],{"class":1157},[1086,3652,3631],{"class":1103},[1086,3654,3634],{"class":1157},[1086,3656,2980],{"class":1103},[1030,3658,3660],{"id":3659},"django-specific-environment-setup","Django-Specific Environment Setup",[1035,3662,3664],{"id":3663},"project-structure-with-virtual-environment","Project Structure with Virtual Environment",[1076,3666,3669],{"className":3667,"code":3668,"language":1592},[1590],"myproject/\n├── venv/                   # Virtual environment\n├── myproject/             # Django project\n│   ├── __init__.py\n│   ├── settings/\n│   ├── urls.py\n│   └── wsgi.py\n├── apps/                  # Django apps\n├── requirements/          # Requirements files\n│   ├── base.txt\n│   ├── development.txt\n│   └── production.txt\n├── .env                   # Environment variables\n├── .gitignore\n├── manage.py\n└── README.md\n",[1083,3670,3668],{"__ignoreMap":1081},[1035,3672,3674],{"id":3673},"requirements-management","Requirements Management",[1026,3676,3677],{},[1049,3678,3679],{},"requirements/base.txt:",[1076,3681,3685],{"className":3682,"code":3683,"language":3684,"meta":1081,"style":1081},"language-txt shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","Django>=4.2,\u003C5.0\npsycopg2-binary==2.9.7\npython-decouple==3.8\nPillow==10.0.1\ndjango-crispy-forms==2.1\n","txt",[1083,3686,3687,3692,3697,3702,3707],{"__ignoreMap":1081},[1086,3688,3689],{"class":1088,"line":1089},[1086,3690,3691],{},"Django>=4.2,\u003C5.0\n",[1086,3693,3694],{"class":1088,"line":1096},[1086,3695,3696],{},"psycopg2-binary==2.9.7\n",[1086,3698,3699],{"class":1088,"line":1117},[1086,3700,3701],{},"python-decouple==3.8\n",[1086,3703,3704],{"class":1088,"line":1132},[1086,3705,3706],{},"Pillow==10.0.1\n",[1086,3708,3709],{"class":1088,"line":1139},[1086,3710,3711],{},"django-crispy-forms==2.1\n",[1026,3713,3714],{},[1049,3715,3716],{},"requirements/development.txt:",[1076,3718,3720],{"className":3682,"code":3719,"language":3684,"meta":1081,"style":1081},"-r base.txt\n\ndjango-debug-toolbar==4.2.0\ndjango-extensions==3.2.3\npytest==7.4.2\npytest-django==4.5.2\nfactory-boy==3.3.0\nblack==23.9.1\nflake8==6.1.0\nisort==5.12.0\nmypy==1.6.0\n",[1083,3721,3722,3727,3731,3736,3741,3746,3751,3756,3761,3766,3771],{"__ignoreMap":1081},[1086,3723,3724],{"class":1088,"line":1089},[1086,3725,3726],{},"-r base.txt\n",[1086,3728,3729],{"class":1088,"line":1096},[1086,3730,1136],{"emptyLinePlaceholder":1135},[1086,3732,3733],{"class":1088,"line":1117},[1086,3734,3735],{},"django-debug-toolbar==4.2.0\n",[1086,3737,3738],{"class":1088,"line":1132},[1086,3739,3740],{},"django-extensions==3.2.3\n",[1086,3742,3743],{"class":1088,"line":1139},[1086,3744,3745],{},"pytest==7.4.2\n",[1086,3747,3748],{"class":1088,"line":1145},[1086,3749,3750],{},"pytest-django==4.5.2\n",[1086,3752,3753],{"class":1088,"line":1151},[1086,3754,3755],{},"factory-boy==3.3.0\n",[1086,3757,3758],{"class":1088,"line":1167},[1086,3759,3760],{},"black==23.9.1\n",[1086,3762,3763],{"class":1088,"line":1177},[1086,3764,3765],{},"flake8==6.1.0\n",[1086,3767,3768],{"class":1088,"line":1189},[1086,3769,3770],{},"isort==5.12.0\n",[1086,3772,3773],{"class":1088,"line":1194},[1086,3774,3775],{},"mypy==1.6.0\n",[1026,3777,3778],{},[1049,3779,3780],{},"requirements/production.txt:",[1076,3782,3784],{"className":3682,"code":3783,"language":3684,"meta":1081,"style":1081},"-r base.txt\n\ngunicorn==21.2.0\nwhitenoise==6.6.0\nsentry-sdk==1.35.0\nredis==5.0.1\ncelery==5.3.4\n",[1083,3785,3786,3790,3794,3799,3804,3809,3814],{"__ignoreMap":1081},[1086,3787,3788],{"class":1088,"line":1089},[1086,3789,3726],{},[1086,3791,3792],{"class":1088,"line":1096},[1086,3793,1136],{"emptyLinePlaceholder":1135},[1086,3795,3796],{"class":1088,"line":1117},[1086,3797,3798],{},"gunicorn==21.2.0\n",[1086,3800,3801],{"class":1088,"line":1132},[1086,3802,3803],{},"whitenoise==6.6.0\n",[1086,3805,3806],{"class":1088,"line":1139},[1086,3807,3808],{},"sentry-sdk==1.35.0\n",[1086,3810,3811],{"class":1088,"line":1145},[1086,3812,3813],{},"redis==5.0.1\n",[1086,3815,3816],{"class":1088,"line":1151},[1086,3817,3818],{},"celery==5.3.4\n",[1035,3820,3822],{"id":3821},"environment-variables","Environment Variables",[1026,3824,3825],{},[1049,3826,3827],{},".env file:",[1076,3829,3831],{"className":1078,"code":3830,"language":1080,"meta":1081,"style":1081},"# Django settings\nSECRET_KEY=your-secret-key-here\nDEBUG=True\nALLOWED_HOSTS=localhost,127.0.0.1\n\n# Database\nDATABASE_URL=postgresql://user:password@localhost:5432/dbname\n\n# Email\nEMAIL_HOST=smtp.gmail.com\nEMAIL_PORT=587\nEMAIL_HOST_USER=your-email@gmail.com\nEMAIL_HOST_PASSWORD=your-app-password\n\n# External services\nREDIS_URL=redis://localhost:6379/0\nCELERY_BROKER_URL=redis://localhost:6379/0\n",[1083,3832,3833,3838,3848,3858,3868,3872,3877,3887,3891,3896,3906,3916,3926,3936,3940,3945,3955],{"__ignoreMap":1081},[1086,3834,3835],{"class":1088,"line":1089},[1086,3836,3837],{"class":1092},"# Django settings\n",[1086,3839,3840,3843,3845],{"class":1088,"line":1096},[1086,3841,3842],{"class":1816},"SECRET_KEY",[1086,3844,1821],{"class":1820},[1086,3846,3847],{"class":1103},"your-secret-key-here\n",[1086,3849,3850,3853,3855],{"class":1088,"line":1117},[1086,3851,3852],{"class":1816},"DEBUG",[1086,3854,1821],{"class":1820},[1086,3856,3857],{"class":1103},"True\n",[1086,3859,3860,3863,3865],{"class":1088,"line":1132},[1086,3861,3862],{"class":1816},"ALLOWED_HOSTS",[1086,3864,1821],{"class":1820},[1086,3866,3867],{"class":1103},"localhost,127.0.0.1\n",[1086,3869,3870],{"class":1088,"line":1139},[1086,3871,1136],{"emptyLinePlaceholder":1135},[1086,3873,3874],{"class":1088,"line":1145},[1086,3875,3876],{"class":1092},"# Database\n",[1086,3878,3879,3882,3884],{"class":1088,"line":1151},[1086,3880,3881],{"class":1816},"DATABASE_URL",[1086,3883,1821],{"class":1820},[1086,3885,3886],{"class":1103},"postgresql://user:password@localhost:5432/dbname\n",[1086,3888,3889],{"class":1088,"line":1167},[1086,3890,1136],{"emptyLinePlaceholder":1135},[1086,3892,3893],{"class":1088,"line":1177},[1086,3894,3895],{"class":1092},"# Email\n",[1086,3897,3898,3901,3903],{"class":1088,"line":1189},[1086,3899,3900],{"class":1816},"EMAIL_HOST",[1086,3902,1821],{"class":1820},[1086,3904,3905],{"class":1103},"smtp.gmail.com\n",[1086,3907,3908,3911,3913],{"class":1088,"line":1194},[1086,3909,3910],{"class":1816},"EMAIL_PORT",[1086,3912,1821],{"class":1820},[1086,3914,3915],{"class":1103},"587\n",[1086,3917,3918,3921,3923],{"class":1088,"line":1200},[1086,3919,3920],{"class":1816},"EMAIL_HOST_USER",[1086,3922,1821],{"class":1820},[1086,3924,3925],{"class":1103},"your-email@gmail.com\n",[1086,3927,3928,3931,3933],{"class":1088,"line":1212},[1086,3929,3930],{"class":1816},"EMAIL_HOST_PASSWORD",[1086,3932,1821],{"class":1820},[1086,3934,3935],{"class":1103},"your-app-password\n",[1086,3937,3938],{"class":1088,"line":1220},[1086,3939,1136],{"emptyLinePlaceholder":1135},[1086,3941,3942],{"class":1088,"line":1938},[1086,3943,3944],{"class":1092},"# External services\n",[1086,3946,3947,3950,3952],{"class":1088,"line":1943},[1086,3948,3949],{"class":1816},"REDIS_URL",[1086,3951,1821],{"class":1820},[1086,3953,3954],{"class":1103},"redis://localhost:6379/0\n",[1086,3956,3957,3960,3962],{"class":1088,"line":1949},[1086,3958,3959],{"class":1816},"CELERY_BROKER_URL",[1086,3961,1821],{"class":1820},[1086,3963,3954],{"class":1103},[1026,3965,3966],{},[1049,3967,3968],{},"Loading in Django:",[1076,3970,3973],{"className":3971,"code":3972,"language":1154,"meta":1081,"style":1081},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# settings/base.py\nfrom decouple import config, Csv\nimport dj_database_url\n\nSECRET_KEY = config('SECRET_KEY')\nDEBUG = config('DEBUG', default=False, cast=bool)\nALLOWED_HOSTS = config('ALLOWED_HOSTS', default='', cast=Csv())\n\n# Database\nDATABASES = {\n    'default': dj_database_url.config(\n        default=config('DATABASE_URL')\n    )\n}\n",[1083,3974,3975,3980,4001,4008,4012,4035,4076,4113,4117,4121,4131,4154,4173,4178],{"__ignoreMap":1081},[1086,3976,3977],{"class":1088,"line":1089},[1086,3978,3979],{"class":1092},"# settings/base.py\n",[1086,3981,3982,3986,3989,3992,3995,3998],{"class":1088,"line":1096},[1086,3983,3985],{"class":3984},"siDh9","from",[1086,3987,3988],{"class":1827}," decouple ",[1086,3990,3991],{"class":3984},"import",[1086,3993,3994],{"class":1827}," config",[1086,3996,3997],{"class":1820},",",[1086,3999,4000],{"class":1827}," Csv\n",[1086,4002,4003,4005],{"class":1088,"line":1117},[1086,4004,3991],{"class":3984},[1086,4006,4007],{"class":1827}," dj_database_url\n",[1086,4009,4010],{"class":1088,"line":1132},[1086,4011,1136],{"emptyLinePlaceholder":1135},[1086,4013,4014,4017,4019,4022,4025,4028,4030,4032],{"class":1088,"line":1139},[1086,4015,3842],{"class":4016},"se3Ec",[1086,4018,2569],{"class":1820},[1086,4020,3994],{"class":4021},"siWMO",[1086,4023,4024],{"class":1820},"(",[1086,4026,4027],{"class":2572},"'",[1086,4029,3842],{"class":1103},[1086,4031,4027],{"class":2572},[1086,4033,4034],{"class":1820},")\n",[1086,4036,4037,4039,4041,4043,4045,4047,4049,4051,4053,4057,4059,4063,4065,4068,4070,4074],{"class":1088,"line":1145},[1086,4038,3852],{"class":4016},[1086,4040,2569],{"class":1820},[1086,4042,3994],{"class":4021},[1086,4044,4024],{"class":1820},[1086,4046,4027],{"class":2572},[1086,4048,3852],{"class":1103},[1086,4050,4027],{"class":2572},[1086,4052,3997],{"class":1820},[1086,4054,4056],{"class":4055},"sqOPj"," default",[1086,4058,1821],{"class":1820},[1086,4060,4062],{"class":4061},"s8XtY","False",[1086,4064,3997],{"class":1820},[1086,4066,4067],{"class":4055}," cast",[1086,4069,1821],{"class":1820},[1086,4071,4073],{"class":4072},"sa2tF","bool",[1086,4075,4034],{"class":1820},[1086,4077,4078,4080,4082,4084,4086,4088,4090,4092,4094,4096,4098,4101,4103,4105,4107,4110],{"class":1088,"line":1151},[1086,4079,3862],{"class":4016},[1086,4081,2569],{"class":1820},[1086,4083,3994],{"class":4021},[1086,4085,4024],{"class":1820},[1086,4087,4027],{"class":2572},[1086,4089,3862],{"class":1103},[1086,4091,4027],{"class":2572},[1086,4093,3997],{"class":1820},[1086,4095,4056],{"class":4055},[1086,4097,1821],{"class":1820},[1086,4099,4100],{"class":2572},"''",[1086,4102,3997],{"class":1820},[1086,4104,4067],{"class":4055},[1086,4106,1821],{"class":1820},[1086,4108,4109],{"class":4021},"Csv",[1086,4111,4112],{"class":1820},"())\n",[1086,4114,4115],{"class":1088,"line":1167},[1086,4116,1136],{"emptyLinePlaceholder":1135},[1086,4118,4119],{"class":1088,"line":1177},[1086,4120,3876],{"class":1092},[1086,4122,4123,4126,4128],{"class":1088,"line":1189},[1086,4124,4125],{"class":4016},"DATABASES",[1086,4127,2569],{"class":1820},[1086,4129,4130],{"class":1820}," {\n",[1086,4132,4133,4136,4139,4141,4143,4146,4148,4151],{"class":1088,"line":1194},[1086,4134,4135],{"class":2572},"    '",[1086,4137,4138],{"class":1103},"default",[1086,4140,4027],{"class":2572},[1086,4142,2305],{"class":1820},[1086,4144,4145],{"class":1827}," dj_database_url",[1086,4147,3152],{"class":1820},[1086,4149,4150],{"class":4021},"config",[1086,4152,4153],{"class":1820},"(\n",[1086,4155,4156,4159,4161,4163,4165,4167,4169,4171],{"class":1088,"line":1200},[1086,4157,4158],{"class":4055},"        default",[1086,4160,1821],{"class":1820},[1086,4162,4150],{"class":4021},[1086,4164,4024],{"class":1820},[1086,4166,4027],{"class":2572},[1086,4168,3881],{"class":1103},[1086,4170,4027],{"class":2572},[1086,4172,4034],{"class":1820},[1086,4174,4175],{"class":1088,"line":1212},[1086,4176,4177],{"class":1820},"    )\n",[1086,4179,4180],{"class":1088,"line":1220},[1086,4181,4182],{"class":1820},"}\n",[1030,4184,4186],{"id":4185},"environment-management-scripts","Environment Management Scripts",[1035,4188,4190],{"id":4189},"activation-scripts","Activation Scripts",[1026,4192,4193],{},[1049,4194,4195],{},"activate.sh (Linux/macOS):",[1076,4197,4199],{"className":1078,"code":4198,"language":1080,"meta":1081,"style":1081},"#!/bin/bash\n# activate.sh - Project activation script\n\nPROJECT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nVENV_DIR=\"$PROJECT_DIR/venv\"\n\n# Activate virtual environment\nif [ -f \"$VENV_DIR/bin/activate\" ]; then\n    source \"$VENV_DIR/bin/activate\"\n    echo \"✓ Virtual environment activated\"\nelse\n    echo \"❌ Virtual environment not found at $VENV_DIR\"\n    exit 1\nfi\n\n# Load environment variables\nif [ -f \"$PROJECT_DIR/.env\" ]; then\n    export $(cat \"$PROJECT_DIR/.env\" | grep -v '^#' | xargs)\n    echo \"✓ Environment variables loaded\"\nfi\n\n# Change to project directory\ncd \"$PROJECT_DIR\"\necho \"✓ Changed to project directory: $PROJECT_DIR\"\n\n# Show status\necho \"\"\necho \"Project: $(basename $PROJECT_DIR)\"\necho \"Python: $(which python)\"\necho \"Django: $(python -c 'import django; print(django.get_version())')\"\n",[1083,4200,4201,4206,4211,4215,4270,4287,4291,4296,4321,4334,4346,4351,4364,4372,4377,4381,4386,4407,4449,4460,4464,4468,4473,4483,4497,4501,4506,4513,4534,4553],{"__ignoreMap":1081},[1086,4202,4203],{"class":1088,"line":1089},[1086,4204,4205],{"class":1092},"#!/bin/bash\n",[1086,4207,4208],{"class":1088,"line":1096},[1086,4209,4210],{"class":1092},"# activate.sh - Project activation script\n",[1086,4212,4213],{"class":1088,"line":1117},[1086,4214,1136],{"emptyLinePlaceholder":1135},[1086,4216,4217,4220,4222,4224,4227,4229,4231,4233,4236,4238,4241,4245,4247,4250,4253,4255,4258,4260,4263,4266,4268],{"class":1088,"line":1132},[1086,4218,4219],{"class":1816},"PROJECT_DIR",[1086,4221,1821],{"class":1820},[1086,4223,3210],{"class":2572},[1086,4225,4226],{"class":1820},"$(",[1086,4228,2016],{"class":1170},[1086,4230,2573],{"class":2572},[1086,4232,4226],{"class":1820},[1086,4234,4235],{"class":1099},"dirname",[1086,4237,2573],{"class":2572},[1086,4239,4240],{"class":1820},"${",[1086,4242,4244],{"class":4243},"su_V2","BASH_SOURCE",[1086,4246,2612],{"class":1820},[1086,4248,4249],{"class":1103},"0",[1086,4251,4252],{"class":1820},"]}",[1086,4254,3210],{"class":2572},[1086,4256,4257],{"class":1820},")",[1086,4259,3210],{"class":2572},[1086,4261,4262],{"class":1820}," &&",[1086,4264,4265],{"class":1170}," pwd",[1086,4267,4257],{"class":1820},[1086,4269,2579],{"class":2572},[1086,4271,4272,4275,4277,4279,4282,4285],{"class":1088,"line":1139},[1086,4273,4274],{"class":1816},"VENV_DIR",[1086,4276,1821],{"class":1820},[1086,4278,3210],{"class":2572},[1086,4280,4281],{"class":4243},"$PROJECT_DIR",[1086,4283,4284],{"class":1103},"/venv",[1086,4286,2579],{"class":2572},[1086,4288,4289],{"class":1088,"line":1145},[1086,4290,1136],{"emptyLinePlaceholder":1135},[1086,4292,4293],{"class":1088,"line":1151},[1086,4294,4295],{"class":1092},"# Activate virtual environment\n",[1086,4297,4298,4301,4303,4305,4307,4310,4313,4315,4318],{"class":1088,"line":1167},[1086,4299,4300],{"class":3984},"if",[1086,4302,3207],{"class":1820},[1086,4304,2282],{"class":2255},[1086,4306,2573],{"class":2572},[1086,4308,4309],{"class":4243},"$VENV_DIR",[1086,4311,4312],{"class":1103},"/bin/activate",[1086,4314,3210],{"class":2572},[1086,4316,4317],{"class":1820}," ];",[1086,4319,4320],{"class":3984}," then\n",[1086,4322,4323,4326,4328,4330,4332],{"class":1088,"line":1177},[1086,4324,4325],{"class":1170},"    source",[1086,4327,2573],{"class":2572},[1086,4329,4309],{"class":4243},[1086,4331,4312],{"class":1103},[1086,4333,2579],{"class":2572},[1086,4335,4336,4339,4341,4344],{"class":1088,"line":1189},[1086,4337,4338],{"class":1170},"    echo",[1086,4340,2573],{"class":2572},[1086,4342,4343],{"class":1103},"✓ Virtual environment activated",[1086,4345,2579],{"class":2572},[1086,4347,4348],{"class":1088,"line":1194},[1086,4349,4350],{"class":3984},"else\n",[1086,4352,4353,4355,4357,4360,4362],{"class":1088,"line":1200},[1086,4354,4338],{"class":1170},[1086,4356,2573],{"class":2572},[1086,4358,4359],{"class":1103},"❌ Virtual environment not found at ",[1086,4361,4309],{"class":4243},[1086,4363,2579],{"class":2572},[1086,4365,4366,4369],{"class":1088,"line":1212},[1086,4367,4368],{"class":1170},"    exit",[1086,4370,4371],{"class":1110}," 1\n",[1086,4373,4374],{"class":1088,"line":1220},[1086,4375,4376],{"class":3984},"fi\n",[1086,4378,4379],{"class":1088,"line":1938},[1086,4380,1136],{"emptyLinePlaceholder":1135},[1086,4382,4383],{"class":1088,"line":1943},[1086,4384,4385],{"class":1092},"# Load environment variables\n",[1086,4387,4388,4390,4392,4394,4396,4398,4401,4403,4405],{"class":1088,"line":1949},[1086,4389,4300],{"class":3984},[1086,4391,3207],{"class":1820},[1086,4393,2282],{"class":2255},[1086,4395,2573],{"class":2572},[1086,4397,4281],{"class":4243},[1086,4399,4400],{"class":1103},"/.env",[1086,4402,3210],{"class":2572},[1086,4404,4317],{"class":1820},[1086,4406,4320],{"class":3984},[1086,4408,4409,4412,4415,4418,4420,4422,4424,4426,4428,4431,4434,4437,4440,4442,4444,4447],{"class":1088,"line":1955},[1086,4410,4411],{"class":1812},"    export",[1086,4413,4414],{"class":1820}," $(",[1086,4416,4417],{"class":1099},"cat",[1086,4419,2573],{"class":2572},[1086,4421,4281],{"class":4243},[1086,4423,4400],{"class":1103},[1086,4425,3210],{"class":2572},[1086,4427,3007],{"class":2255},[1086,4429,4430],{"class":1099}," grep",[1086,4432,4433],{"class":1157}," -v",[1086,4435,4436],{"class":2572}," '",[1086,4438,4439],{"class":1103},"^#",[1086,4441,4027],{"class":2572},[1086,4443,3007],{"class":2255},[1086,4445,4446],{"class":1099}," xargs",[1086,4448,4034],{"class":1820},[1086,4450,4451,4453,4455,4458],{"class":1088,"line":1960},[1086,4452,4338],{"class":1170},[1086,4454,2573],{"class":2572},[1086,4456,4457],{"class":1103},"✓ Environment variables loaded",[1086,4459,2579],{"class":2572},[1086,4461,4462],{"class":1088,"line":1966},[1086,4463,4376],{"class":3984},[1086,4465,4466],{"class":1088,"line":2262},[1086,4467,1136],{"emptyLinePlaceholder":1135},[1086,4469,4470],{"class":1088,"line":2267},[1086,4471,4472],{"class":1092},"# Change to project directory\n",[1086,4474,4475,4477,4479,4481],{"class":1088,"line":2273},[1086,4476,2016],{"class":1170},[1086,4478,2573],{"class":2572},[1086,4480,4281],{"class":4243},[1086,4482,2579],{"class":2572},[1086,4484,4485,4488,4490,4493,4495],{"class":1088,"line":2806},[1086,4486,4487],{"class":1170},"echo",[1086,4489,2573],{"class":2572},[1086,4491,4492],{"class":1103},"✓ Changed to project directory: ",[1086,4494,4281],{"class":4243},[1086,4496,2579],{"class":2572},[1086,4498,4499],{"class":1088,"line":2820},[1086,4500,1136],{"emptyLinePlaceholder":1135},[1086,4502,4503],{"class":1088,"line":3471},[1086,4504,4505],{"class":1092},"# Show status\n",[1086,4507,4508,4510],{"class":1088,"line":3484},[1086,4509,4487],{"class":1170},[1086,4511,4512],{"class":2572}," \"\"\n",[1086,4514,4515,4517,4519,4522,4524,4527,4530,4532],{"class":1088,"line":3489},[1086,4516,4487],{"class":1170},[1086,4518,2573],{"class":2572},[1086,4520,4521],{"class":1103},"Project: ",[1086,4523,4226],{"class":1820},[1086,4525,4526],{"class":1099},"basename",[1086,4528,4529],{"class":4243}," $PROJECT_DIR",[1086,4531,4257],{"class":1820},[1086,4533,2579],{"class":2572},[1086,4535,4536,4538,4540,4543,4545,4547,4549,4551],{"class":1088,"line":3499},[1086,4537,4487],{"class":1170},[1086,4539,2573],{"class":2572},[1086,4541,4542],{"class":1103},"Python: ",[1086,4544,4226],{"class":1820},[1086,4546,1481],{"class":1170},[1086,4548,2872],{"class":1103},[1086,4550,4257],{"class":1820},[1086,4552,2579],{"class":2572},[1086,4554,4555,4557,4559,4562,4564,4566,4569,4571,4574,4576,4578],{"class":1088,"line":3517},[1086,4556,4487],{"class":1170},[1086,4558,2573],{"class":2572},[1086,4560,4561],{"class":1103},"Django: ",[1086,4563,4226],{"class":1820},[1086,4565,1154],{"class":1099},[1086,4567,4568],{"class":1157}," -c",[1086,4570,4436],{"class":2572},[1086,4572,4573],{"class":1103},"import django; print(django.get_version())",[1086,4575,4027],{"class":2572},[1086,4577,4257],{"class":1820},[1086,4579,2579],{"class":2572},[1026,4581,4582],{},[1049,4583,4584],{},"activate.bat (Windows):",[1076,4586,4590],{"className":4587,"code":4588,"language":4589,"meta":1081,"style":1081},"language-batch shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","@echo off\nREM activate.bat - Project activation script\n\nset PROJECT_DIR=%~dp0\nset VENV_DIR=%PROJECT_DIR%venv\n\nREM Activate virtual environment\nif exist \"%VENV_DIR%\\Scripts\\activate.bat\" (\n    call \"%VENV_DIR%\\Scripts\\activate.bat\"\n    echo ✓ Virtual environment activated\n) else (\n    echo ❌ Virtual environment not found at %VENV_DIR%\n    exit /b 1\n)\n\nREM Change to project directory\ncd /d \"%PROJECT_DIR%\"\necho ✓ Changed to project directory: %PROJECT_DIR%\n\nREM Show status\necho.\necho Project: %~n0\npython -c \"import sys; print('Python:', sys.executable)\"\npython -c \"import django; print('Django:', django.get_version())\"\n","batch",[1083,4591,4592,4597,4602,4606,4611,4616,4620,4625,4630,4635,4640,4645,4650,4655,4659,4663,4668,4673,4678,4682,4687,4692,4697,4702],{"__ignoreMap":1081},[1086,4593,4594],{"class":1088,"line":1089},[1086,4595,4596],{},"@echo off\n",[1086,4598,4599],{"class":1088,"line":1096},[1086,4600,4601],{},"REM activate.bat - Project activation script\n",[1086,4603,4604],{"class":1088,"line":1117},[1086,4605,1136],{"emptyLinePlaceholder":1135},[1086,4607,4608],{"class":1088,"line":1132},[1086,4609,4610],{},"set PROJECT_DIR=%~dp0\n",[1086,4612,4613],{"class":1088,"line":1139},[1086,4614,4615],{},"set VENV_DIR=%PROJECT_DIR%venv\n",[1086,4617,4618],{"class":1088,"line":1145},[1086,4619,1136],{"emptyLinePlaceholder":1135},[1086,4621,4622],{"class":1088,"line":1151},[1086,4623,4624],{},"REM Activate virtual environment\n",[1086,4626,4627],{"class":1088,"line":1167},[1086,4628,4629],{},"if exist \"%VENV_DIR%\\Scripts\\activate.bat\" (\n",[1086,4631,4632],{"class":1088,"line":1177},[1086,4633,4634],{},"    call \"%VENV_DIR%\\Scripts\\activate.bat\"\n",[1086,4636,4637],{"class":1088,"line":1189},[1086,4638,4639],{},"    echo ✓ Virtual environment activated\n",[1086,4641,4642],{"class":1088,"line":1194},[1086,4643,4644],{},") else (\n",[1086,4646,4647],{"class":1088,"line":1200},[1086,4648,4649],{},"    echo ❌ Virtual environment not found at %VENV_DIR%\n",[1086,4651,4652],{"class":1088,"line":1212},[1086,4653,4654],{},"    exit /b 1\n",[1086,4656,4657],{"class":1088,"line":1220},[1086,4658,4034],{},[1086,4660,4661],{"class":1088,"line":1938},[1086,4662,1136],{"emptyLinePlaceholder":1135},[1086,4664,4665],{"class":1088,"line":1943},[1086,4666,4667],{},"REM Change to project directory\n",[1086,4669,4670],{"class":1088,"line":1949},[1086,4671,4672],{},"cd /d \"%PROJECT_DIR%\"\n",[1086,4674,4675],{"class":1088,"line":1955},[1086,4676,4677],{},"echo ✓ Changed to project directory: %PROJECT_DIR%\n",[1086,4679,4680],{"class":1088,"line":1960},[1086,4681,1136],{"emptyLinePlaceholder":1135},[1086,4683,4684],{"class":1088,"line":1966},[1086,4685,4686],{},"REM Show status\n",[1086,4688,4689],{"class":1088,"line":2262},[1086,4690,4691],{},"echo.\n",[1086,4693,4694],{"class":1088,"line":2267},[1086,4695,4696],{},"echo Project: %~n0\n",[1086,4698,4699],{"class":1088,"line":2273},[1086,4700,4701],{},"python -c \"import sys; print('Python:', sys.executable)\"\n",[1086,4703,4704],{"class":1088,"line":2806},[1086,4705,4706],{},"python -c \"import django; print('Django:', django.get_version())\"\n",[1035,4708,4710],{"id":4709},"setup-scripts","Setup Scripts",[1026,4712,4713],{},[1049,4714,4715],{},"setup.sh:",[1076,4717,4719],{"className":1078,"code":4718,"language":1080,"meta":1081,"style":1081},"#!/bin/bash\n# setup.sh - Project setup script\n\nset -e  # Exit on any error\n\nPROJECT_NAME=\"myproject\"\nPYTHON_VERSION=\"3.11\"\n\necho \"🚀 Setting up Django project: $PROJECT_NAME\"\n\n# Check Python version\nif ! command -v python$PYTHON_VERSION &> /dev/null; then\n    echo \"❌ Python $PYTHON_VERSION not found\"\n    exit 1\nfi\n\n# Create virtual environment\necho \"📦 Creating virtual environment...\"\npython$PYTHON_VERSION -m venv venv\n\n# Activate virtual environment\nsource venv/bin/activate\n\n# Upgrade pip\necho \"⬆️  Upgrading pip...\"\npip install --upgrade pip\n\n# Install requirements\nif [ -f \"requirements/development.txt\" ]; then\n    echo \"📋 Installing development requirements...\"\n    pip install -r requirements/development.txt\nelif [ -f \"requirements.txt\" ]; then\n    echo \"📋 Installing requirements...\"\n    pip install -r requirements.txt\nelse\n    echo \"📋 Installing Django...\"\n    pip install django\nfi\n\n# Create .env from template\nif [ -f \".env.example\" ] && [ ! -f \".env\" ]; then\n    echo \"🔧 Creating .env file...\"\n    cp .env.example .env\n    echo \"⚠️  Please update .env with your settings\"\nfi\n\n# Run migrations\nif [ -f \"manage.py\" ]; then\n    echo \"🗄️  Running migrations...\"\n    python manage.py migrate\nfi\n\necho \"✅ Setup complete!\"\necho \"💡 Run 'source venv/bin/activate' to activate the environment\"\n",[1083,4720,4721,4725,4730,4734,4745,4749,4762,4775,4779,4793,4797,4801,4832,4848,4854,4858,4862,4866,4877,4889,4893,4897,4904,4908,4913,4924,4934,4938,4943,4962,4973,4986,5007,5019,5030,5035,5047,5056,5061,5066,5072,5110,5122,5134,5146,5151,5156,5162,5182,5194,5205,5210,5215,5227],{"__ignoreMap":1081},[1086,4722,4723],{"class":1088,"line":1089},[1086,4724,4205],{"class":1092},[1086,4726,4727],{"class":1088,"line":1096},[1086,4728,4729],{"class":1092},"# setup.sh - Project setup script\n",[1086,4731,4732],{"class":1088,"line":1117},[1086,4733,1136],{"emptyLinePlaceholder":1135},[1086,4735,4736,4739,4742],{"class":1088,"line":1132},[1086,4737,4738],{"class":1170},"set",[1086,4740,4741],{"class":1157}," -e",[1086,4743,4744],{"class":1092},"  # Exit on any error\n",[1086,4746,4747],{"class":1088,"line":1139},[1086,4748,1136],{"emptyLinePlaceholder":1135},[1086,4750,4751,4754,4756,4758,4760],{"class":1088,"line":1145},[1086,4752,4753],{"class":1816},"PROJECT_NAME",[1086,4755,1821],{"class":1820},[1086,4757,3210],{"class":2572},[1086,4759,3167],{"class":1103},[1086,4761,2579],{"class":2572},[1086,4763,4764,4767,4769,4771,4773],{"class":1088,"line":1151},[1086,4765,4766],{"class":1816},"PYTHON_VERSION",[1086,4768,1821],{"class":1820},[1086,4770,3210],{"class":2572},[1086,4772,2157],{"class":1103},[1086,4774,2579],{"class":2572},[1086,4776,4777],{"class":1088,"line":1167},[1086,4778,1136],{"emptyLinePlaceholder":1135},[1086,4780,4781,4783,4785,4788,4791],{"class":1088,"line":1177},[1086,4782,4487],{"class":1170},[1086,4784,2573],{"class":2572},[1086,4786,4787],{"class":1103},"🚀 Setting up Django project: ",[1086,4789,4790],{"class":4243},"$PROJECT_NAME",[1086,4792,2579],{"class":2572},[1086,4794,4795],{"class":1088,"line":1189},[1086,4796,1136],{"emptyLinePlaceholder":1135},[1086,4798,4799],{"class":1088,"line":1194},[1086,4800,1498],{"class":1092},[1086,4802,4803,4805,4808,4811,4813,4815,4818,4821,4824,4827,4830],{"class":1088,"line":1200},[1086,4804,4300],{"class":3984},[1086,4806,4807],{"class":2255}," !",[1086,4809,4810],{"class":1170}," command",[1086,4812,4433],{"class":1157},[1086,4814,2872],{"class":1103},[1086,4816,4817],{"class":1816},"$PYTHON_VERSION",[1086,4819,4820],{"class":1820}," &",[1086,4822,4823],{"class":2255},">",[1086,4825,4826],{"class":1827}," /dev/null",[1086,4828,4829],{"class":1820},";",[1086,4831,4320],{"class":3984},[1086,4833,4834,4836,4838,4841,4843,4846],{"class":1088,"line":1212},[1086,4835,4338],{"class":1170},[1086,4837,2573],{"class":2572},[1086,4839,4840],{"class":1103},"❌ Python ",[1086,4842,4817],{"class":4243},[1086,4844,4845],{"class":1103}," not found",[1086,4847,2579],{"class":2572},[1086,4849,4850,4852],{"class":1088,"line":1220},[1086,4851,4368],{"class":1170},[1086,4853,4371],{"class":1110},[1086,4855,4856],{"class":1088,"line":1938},[1086,4857,4376],{"class":3984},[1086,4859,4860],{"class":1088,"line":1943},[1086,4861,1136],{"emptyLinePlaceholder":1135},[1086,4863,4864],{"class":1088,"line":1949},[1086,4865,1252],{"class":1092},[1086,4867,4868,4870,4872,4875],{"class":1088,"line":1955},[1086,4869,4487],{"class":1170},[1086,4871,2573],{"class":2572},[1086,4873,4874],{"class":1103},"📦 Creating virtual environment...",[1086,4876,2579],{"class":2572},[1086,4878,4879,4882,4884,4886],{"class":1088,"line":1960},[1086,4880,4881],{"class":1099},"python$PYTHON_VERSION",[1086,4883,1158],{"class":1157},[1086,4885,1161],{"class":1103},[1086,4887,4888],{"class":1103}," venv\n",[1086,4890,4891],{"class":1088,"line":1966},[1086,4892,1136],{"emptyLinePlaceholder":1135},[1086,4894,4895],{"class":1088,"line":2262},[1086,4896,4295],{"class":1092},[1086,4898,4899,4901],{"class":1088,"line":2267},[1086,4900,1171],{"class":1170},[1086,4902,4903],{"class":1103}," venv/bin/activate\n",[1086,4905,4906],{"class":1088,"line":2273},[1086,4907,1136],{"emptyLinePlaceholder":1135},[1086,4909,4910],{"class":1088,"line":2806},[1086,4911,4912],{"class":1092},"# Upgrade pip\n",[1086,4914,4915,4917,4919,4922],{"class":1088,"line":2820},[1086,4916,4487],{"class":1170},[1086,4918,2573],{"class":2572},[1086,4920,4921],{"class":1103},"⬆️  Upgrading pip...",[1086,4923,2579],{"class":2572},[1086,4925,4926,4928,4930,4932],{"class":1088,"line":3471},[1086,4927,1100],{"class":1099},[1086,4929,1104],{"class":1103},[1086,4931,1417],{"class":1157},[1086,4933,2351],{"class":1103},[1086,4935,4936],{"class":1088,"line":3484},[1086,4937,1136],{"emptyLinePlaceholder":1135},[1086,4939,4940],{"class":1088,"line":3489},[1086,4941,4942],{"class":1092},"# Install requirements\n",[1086,4944,4945,4947,4949,4951,4953,4956,4958,4960],{"class":1088,"line":3499},[1086,4946,4300],{"class":3984},[1086,4948,3207],{"class":1820},[1086,4950,2282],{"class":2255},[1086,4952,2573],{"class":2572},[1086,4954,4955],{"class":1103},"requirements/development.txt",[1086,4957,3210],{"class":2572},[1086,4959,4317],{"class":1820},[1086,4961,4320],{"class":3984},[1086,4963,4964,4966,4968,4971],{"class":1088,"line":3517},[1086,4965,4338],{"class":1170},[1086,4967,2573],{"class":2572},[1086,4969,4970],{"class":1103},"📋 Installing development requirements...",[1086,4972,2579],{"class":2572},[1086,4974,4976,4979,4981,4983],{"class":1088,"line":4975},31,[1086,4977,4978],{"class":1099},"    pip",[1086,4980,1104],{"class":1103},[1086,4982,2499],{"class":1157},[1086,4984,4985],{"class":1103}," requirements/development.txt\n",[1086,4987,4989,4992,4994,4996,4998,5001,5003,5005],{"class":1088,"line":4988},32,[1086,4990,4991],{"class":3984},"elif",[1086,4993,3207],{"class":1820},[1086,4995,2282],{"class":2255},[1086,4997,2573],{"class":2572},[1086,4999,5000],{"class":1103},"requirements.txt",[1086,5002,3210],{"class":2572},[1086,5004,4317],{"class":1820},[1086,5006,4320],{"class":3984},[1086,5008,5010,5012,5014,5017],{"class":1088,"line":5009},33,[1086,5011,4338],{"class":1170},[1086,5013,2573],{"class":2572},[1086,5015,5016],{"class":1103},"📋 Installing requirements...",[1086,5018,2579],{"class":2572},[1086,5020,5022,5024,5026,5028],{"class":1088,"line":5021},34,[1086,5023,4978],{"class":1099},[1086,5025,1104],{"class":1103},[1086,5027,2499],{"class":1157},[1086,5029,2502],{"class":1103},[1086,5031,5033],{"class":1088,"line":5032},35,[1086,5034,4350],{"class":3984},[1086,5036,5038,5040,5042,5045],{"class":1088,"line":5037},36,[1086,5039,4338],{"class":1170},[1086,5041,2573],{"class":2572},[1086,5043,5044],{"class":1103},"📋 Installing Django...",[1086,5046,2579],{"class":2572},[1086,5048,5050,5052,5054],{"class":1088,"line":5049},37,[1086,5051,4978],{"class":1099},[1086,5053,1104],{"class":1103},[1086,5055,2460],{"class":1103},[1086,5057,5059],{"class":1088,"line":5058},38,[1086,5060,4376],{"class":3984},[1086,5062,5064],{"class":1088,"line":5063},39,[1086,5065,1136],{"emptyLinePlaceholder":1135},[1086,5067,5069],{"class":1088,"line":5068},40,[1086,5070,5071],{"class":1092},"# Create .env from template\n",[1086,5073,5075,5077,5079,5081,5083,5086,5088,5091,5093,5095,5097,5099,5101,5104,5106,5108],{"class":1088,"line":5074},41,[1086,5076,4300],{"class":3984},[1086,5078,3207],{"class":1820},[1086,5080,2282],{"class":2255},[1086,5082,2573],{"class":2572},[1086,5084,5085],{"class":1103},".env.example",[1086,5087,3210],{"class":2572},[1086,5089,5090],{"class":1820}," ]",[1086,5092,4262],{"class":1820},[1086,5094,3207],{"class":1820},[1086,5096,4807],{"class":2255},[1086,5098,2282],{"class":2255},[1086,5100,2573],{"class":2572},[1086,5102,5103],{"class":1103},".env",[1086,5105,3210],{"class":2572},[1086,5107,4317],{"class":1820},[1086,5109,4320],{"class":3984},[1086,5111,5113,5115,5117,5120],{"class":1088,"line":5112},42,[1086,5114,4338],{"class":1170},[1086,5116,2573],{"class":2572},[1086,5118,5119],{"class":1103},"🔧 Creating .env file...",[1086,5121,2579],{"class":2572},[1086,5123,5125,5128,5131],{"class":1088,"line":5124},43,[1086,5126,5127],{"class":1099},"    cp",[1086,5129,5130],{"class":1103}," .env.example",[1086,5132,5133],{"class":1103}," .env\n",[1086,5135,5137,5139,5141,5144],{"class":1088,"line":5136},44,[1086,5138,4338],{"class":1170},[1086,5140,2573],{"class":2572},[1086,5142,5143],{"class":1103},"⚠️  Please update .env with your settings",[1086,5145,2579],{"class":2572},[1086,5147,5149],{"class":1088,"line":5148},45,[1086,5150,4376],{"class":3984},[1086,5152,5154],{"class":1088,"line":5153},46,[1086,5155,1136],{"emptyLinePlaceholder":1135},[1086,5157,5159],{"class":1088,"line":5158},47,[1086,5160,5161],{"class":1092},"# Run migrations\n",[1086,5163,5165,5167,5169,5171,5173,5176,5178,5180],{"class":1088,"line":5164},48,[1086,5166,4300],{"class":3984},[1086,5168,3207],{"class":1820},[1086,5170,2282],{"class":2255},[1086,5172,2573],{"class":2572},[1086,5174,5175],{"class":1103},"manage.py",[1086,5177,3210],{"class":2572},[1086,5179,4317],{"class":1820},[1086,5181,4320],{"class":3984},[1086,5183,5185,5187,5189,5192],{"class":1088,"line":5184},49,[1086,5186,4338],{"class":1170},[1086,5188,2573],{"class":2572},[1086,5190,5191],{"class":1103},"🗄️  Running migrations...",[1086,5193,2579],{"class":2572},[1086,5195,5197,5200,5202],{"class":1088,"line":5196},50,[1086,5198,5199],{"class":1099},"    python",[1086,5201,2875],{"class":1103},[1086,5203,5204],{"class":1103}," migrate\n",[1086,5206,5208],{"class":1088,"line":5207},51,[1086,5209,4376],{"class":3984},[1086,5211,5213],{"class":1088,"line":5212},52,[1086,5214,1136],{"emptyLinePlaceholder":1135},[1086,5216,5218,5220,5222,5225],{"class":1088,"line":5217},53,[1086,5219,4487],{"class":1170},[1086,5221,2573],{"class":2572},[1086,5223,5224],{"class":1103},"✅ Setup complete!",[1086,5226,2579],{"class":2572},[1086,5228,5230,5232,5234,5237],{"class":1088,"line":5229},54,[1086,5231,4487],{"class":1170},[1086,5233,2573],{"class":2572},[1086,5235,5236],{"class":1103},"💡 Run 'source venv/bin/activate' to activate the environment",[1086,5238,2579],{"class":2572},[1030,5240,921],{"id":5241},"best-practices",[1035,5243,5245],{"id":5244},"naming-conventions","Naming Conventions",[1076,5247,5249],{"className":1078,"code":5248,"language":1080,"meta":1081,"style":1081},"# Good naming patterns\nmyproject_env          # Project-specific\ndjango_blog_env        # Descriptive\nvenv                   # Simple and common\n.venv                  # Hidden directory\n\n# Avoid these patterns\nenv                    # Too generic\npython_env             # Not specific\nmy_env                 # Not descriptive\n",[1083,5250,5251,5256,5264,5272,5280,5288,5292,5297,5305,5313],{"__ignoreMap":1081},[1086,5252,5253],{"class":1088,"line":1089},[1086,5254,5255],{"class":1092},"# Good naming patterns\n",[1086,5257,5258,5261],{"class":1088,"line":1096},[1086,5259,5260],{"class":1099},"myproject_env",[1086,5262,5263],{"class":1092},"          # Project-specific\n",[1086,5265,5266,5269],{"class":1088,"line":1117},[1086,5267,5268],{"class":1099},"django_blog_env",[1086,5270,5271],{"class":1092},"        # Descriptive\n",[1086,5273,5274,5277],{"class":1088,"line":1132},[1086,5275,5276],{"class":1099},"venv",[1086,5278,5279],{"class":1092},"                   # Simple and common\n",[1086,5281,5282,5285],{"class":1088,"line":1139},[1086,5283,5284],{"class":1099},".venv",[1086,5286,5287],{"class":1092},"                  # Hidden directory\n",[1086,5289,5290],{"class":1088,"line":1145},[1086,5291,1136],{"emptyLinePlaceholder":1135},[1086,5293,5294],{"class":1088,"line":1151},[1086,5295,5296],{"class":1092},"# Avoid these patterns\n",[1086,5298,5299,5302],{"class":1088,"line":1167},[1086,5300,5301],{"class":1099},"env",[1086,5303,5304],{"class":1092},"                    # Too generic\n",[1086,5306,5307,5310],{"class":1088,"line":1177},[1086,5308,5309],{"class":1099},"python_env",[1086,5311,5312],{"class":1092},"             # Not specific\n",[1086,5314,5315,5318],{"class":1088,"line":1189},[1086,5316,5317],{"class":1099},"my_env",[1086,5319,5320],{"class":1092},"                 # Not descriptive\n",[1035,5322,5324],{"id":5323},"directory-organization","Directory Organization",[1076,5326,5329],{"className":5327,"code":5328,"language":1592},[1590],"~/Projects/\n├── myproject/\n│   ├── venv/          # Virtual environment\n│   ├── src/           # Source code\n│   ├── docs/          # Documentation\n│   ├── tests/         # Tests\n│   └── requirements/  # Requirements files\n├── another_project/\n│   ├── .venv/         # Hidden virtual environment\n│   └── ...\n└── shared_envs/       # Shared environments (if needed)\n    ├── django42_env/\n    └── testing_env/\n",[1083,5330,5328],{"__ignoreMap":1081},[1035,5332,3674],{"id":5333},"requirements-management-1",[1026,5335,5336],{},[1049,5337,5338],{},"Separate requirements files:",[1076,5340,5342],{"className":1078,"code":5341,"language":1080,"meta":1081,"style":1081},"requirements/\n├── base.txt           # Core dependencies\n├── development.txt    # Development tools\n├── production.txt     # Production-specific\n├── testing.txt        # Testing dependencies\n└── local.txt          # Local overrides\n",[1083,5343,5344,5349,5360,5370,5380,5390],{"__ignoreMap":1081},[1086,5345,5346],{"class":1088,"line":1089},[1086,5347,5348],{"class":1099},"requirements/\n",[1086,5350,5351,5354,5357],{"class":1088,"line":1096},[1086,5352,5353],{"class":1099},"├──",[1086,5355,5356],{"class":1103}," base.txt",[1086,5358,5359],{"class":1092},"           # Core dependencies\n",[1086,5361,5362,5364,5367],{"class":1088,"line":1117},[1086,5363,5353],{"class":1099},[1086,5365,5366],{"class":1103}," development.txt",[1086,5368,5369],{"class":1092},"    # Development tools\n",[1086,5371,5372,5374,5377],{"class":1088,"line":1132},[1086,5373,5353],{"class":1099},[1086,5375,5376],{"class":1103}," production.txt",[1086,5378,5379],{"class":1092},"     # Production-specific\n",[1086,5381,5382,5384,5387],{"class":1088,"line":1139},[1086,5383,5353],{"class":1099},[1086,5385,5386],{"class":1103}," testing.txt",[1086,5388,5389],{"class":1092},"        # Testing dependencies\n",[1086,5391,5392,5395,5398],{"class":1088,"line":1145},[1086,5393,5394],{"class":1099},"└──",[1086,5396,5397],{"class":1103}," local.txt",[1086,5399,5400],{"class":1092},"          # Local overrides\n",[1026,5402,5403],{},[1049,5404,5405],{},"Pin versions for reproducibility:",[1076,5407,5409],{"className":3682,"code":5408,"language":3684,"meta":1081,"style":1081},"# Good - pinned versions\nDjango==4.2.7\npsycopg2-binary==2.9.7\npython-decouple==3.8\n\n# Acceptable - compatible versions\nDjango>=4.2,\u003C5.0\npsycopg2-binary~=2.9.0\n\n# Avoid - unpinned versions\nDjango\npsycopg2-binary\n",[1083,5410,5411,5416,5421,5425,5429,5433,5438,5442,5447,5451,5456,5461],{"__ignoreMap":1081},[1086,5412,5413],{"class":1088,"line":1089},[1086,5414,5415],{},"# Good - pinned versions\n",[1086,5417,5418],{"class":1088,"line":1096},[1086,5419,5420],{},"Django==4.2.7\n",[1086,5422,5423],{"class":1088,"line":1117},[1086,5424,3696],{},[1086,5426,5427],{"class":1088,"line":1132},[1086,5428,3701],{},[1086,5430,5431],{"class":1088,"line":1139},[1086,5432,1136],{"emptyLinePlaceholder":1135},[1086,5434,5435],{"class":1088,"line":1145},[1086,5436,5437],{},"# Acceptable - compatible versions\n",[1086,5439,5440],{"class":1088,"line":1151},[1086,5441,3691],{},[1086,5443,5444],{"class":1088,"line":1167},[1086,5445,5446],{},"psycopg2-binary~=2.9.0\n",[1086,5448,5449],{"class":1088,"line":1177},[1086,5450,1136],{"emptyLinePlaceholder":1135},[1086,5452,5453],{"class":1088,"line":1189},[1086,5454,5455],{},"# Avoid - unpinned versions\n",[1086,5457,5458],{"class":1088,"line":1194},[1086,5459,5460],{},"Django\n",[1086,5462,5463],{"class":1088,"line":1200},[1086,5464,5465],{},"psycopg2-binary\n",[1035,5467,3822],{"id":5468},"environment-variables-1",[1026,5470,5471],{},[1049,5472,5473],{},"Secure environment management:",[1076,5475,5477],{"className":1078,"code":5476,"language":1080,"meta":1081,"style":1081},"# .env (never commit to version control)\nSECRET_KEY=actual-secret-key\nDATABASE_PASSWORD=real-password\n\n# .env.example (commit this template)\nSECRET_KEY=your-secret-key-here\nDATABASE_PASSWORD=your-database-password\n",[1083,5478,5479,5484,5493,5503,5507,5512,5520],{"__ignoreMap":1081},[1086,5480,5481],{"class":1088,"line":1089},[1086,5482,5483],{"class":1092},"# .env (never commit to version control)\n",[1086,5485,5486,5488,5490],{"class":1088,"line":1096},[1086,5487,3842],{"class":1816},[1086,5489,1821],{"class":1820},[1086,5491,5492],{"class":1103},"actual-secret-key\n",[1086,5494,5495,5498,5500],{"class":1088,"line":1117},[1086,5496,5497],{"class":1816},"DATABASE_PASSWORD",[1086,5499,1821],{"class":1820},[1086,5501,5502],{"class":1103},"real-password\n",[1086,5504,5505],{"class":1088,"line":1132},[1086,5506,1136],{"emptyLinePlaceholder":1135},[1086,5508,5509],{"class":1088,"line":1139},[1086,5510,5511],{"class":1092},"# .env.example (commit this template)\n",[1086,5513,5514,5516,5518],{"class":1088,"line":1145},[1086,5515,3842],{"class":1816},[1086,5517,1821],{"class":1820},[1086,5519,3847],{"class":1103},[1086,5521,5522,5524,5526],{"class":1088,"line":1151},[1086,5523,5497],{"class":1816},[1086,5525,1821],{"class":1820},[1086,5527,5528],{"class":1103},"your-database-password\n",[1030,5530,5532],{"id":5531},"troubleshooting","Troubleshooting",[1035,5534,5536],{"id":5535},"common-issues","Common Issues",[1026,5538,5539],{},[1049,5540,5541],{},"Virtual environment not activating:",[1076,5543,5545],{"className":1078,"code":5544,"language":1080,"meta":1081,"style":1081},"# Check if environment exists\nls -la venv/\n\n# Recreate if corrupted\nrm -rf venv\npython -m venv venv\n\n# Check activation script permissions\nchmod +x venv/bin/activate\n",[1083,5546,5547,5552,5563,5567,5572,5582,5592,5596,5601],{"__ignoreMap":1081},[1086,5548,5549],{"class":1088,"line":1089},[1086,5550,5551],{"class":1092},"# Check if environment exists\n",[1086,5553,5554,5557,5560],{"class":1088,"line":1096},[1086,5555,5556],{"class":1099},"ls",[1086,5558,5559],{"class":1157}," -la",[1086,5561,5562],{"class":1103}," venv/\n",[1086,5564,5565],{"class":1088,"line":1117},[1086,5566,1136],{"emptyLinePlaceholder":1135},[1086,5568,5569],{"class":1088,"line":1132},[1086,5570,5571],{"class":1092},"# Recreate if corrupted\n",[1086,5573,5574,5577,5580],{"class":1088,"line":1139},[1086,5575,5576],{"class":1099},"rm",[1086,5578,5579],{"class":1157}," -rf",[1086,5581,4888],{"class":1103},[1086,5583,5584,5586,5588,5590],{"class":1088,"line":1145},[1086,5585,1154],{"class":1099},[1086,5587,1158],{"class":1157},[1086,5589,1161],{"class":1103},[1086,5591,4888],{"class":1103},[1086,5593,5594],{"class":1088,"line":1151},[1086,5595,1136],{"emptyLinePlaceholder":1135},[1086,5597,5598],{"class":1088,"line":1167},[1086,5599,5600],{"class":1092},"# Check activation script permissions\n",[1086,5602,5603,5606,5609],{"class":1088,"line":1177},[1086,5604,5605],{"class":1099},"chmod",[1086,5607,5608],{"class":1103}," +x",[1086,5610,4903],{"class":1103},[1026,5612,5613],{},[1049,5614,5615],{},"Package installation failures:",[1076,5617,5619],{"className":1078,"code":5618,"language":1080,"meta":1081,"style":1081},"# Upgrade pip first\npip install --upgrade pip\n\n# Install with verbose output\npip install -v django\n\n# Clear pip cache\npip cache purge\n\n# Install with no cache\npip install --no-cache-dir django\n",[1083,5620,5621,5626,5636,5640,5645,5655,5659,5664,5674,5678,5683],{"__ignoreMap":1081},[1086,5622,5623],{"class":1088,"line":1089},[1086,5624,5625],{"class":1092},"# Upgrade pip first\n",[1086,5627,5628,5630,5632,5634],{"class":1088,"line":1096},[1086,5629,1100],{"class":1099},[1086,5631,1104],{"class":1103},[1086,5633,1417],{"class":1157},[1086,5635,2351],{"class":1103},[1086,5637,5638],{"class":1088,"line":1117},[1086,5639,1136],{"emptyLinePlaceholder":1135},[1086,5641,5642],{"class":1088,"line":1132},[1086,5643,5644],{"class":1092},"# Install with verbose output\n",[1086,5646,5647,5649,5651,5653],{"class":1088,"line":1139},[1086,5648,1100],{"class":1099},[1086,5650,1104],{"class":1103},[1086,5652,4433],{"class":1157},[1086,5654,2460],{"class":1103},[1086,5656,5657],{"class":1088,"line":1145},[1086,5658,1136],{"emptyLinePlaceholder":1135},[1086,5660,5661],{"class":1088,"line":1151},[1086,5662,5663],{"class":1092},"# Clear pip cache\n",[1086,5665,5666,5668,5671],{"class":1088,"line":1167},[1086,5667,1100],{"class":1099},[1086,5669,5670],{"class":1103}," cache",[1086,5672,5673],{"class":1103}," purge\n",[1086,5675,5676],{"class":1088,"line":1177},[1086,5677,1136],{"emptyLinePlaceholder":1135},[1086,5679,5680],{"class":1088,"line":1189},[1086,5681,5682],{"class":1092},"# Install with no cache\n",[1086,5684,5685,5687,5689,5692],{"class":1088,"line":1194},[1086,5686,1100],{"class":1099},[1086,5688,1104],{"class":1103},[1086,5690,5691],{"class":1157}," --no-cache-dir",[1086,5693,2460],{"class":1103},[1026,5695,5696],{},[1049,5697,5698],{},"Python version conflicts:",[1076,5700,5702],{"className":1078,"code":5701,"language":1080,"meta":1081,"style":1081},"# Check Python version in environment\nwhich python\npython --version\n\n# Recreate with specific Python version\nrm -rf venv\npython3.11 -m venv venv\n",[1083,5703,5704,5709,5715,5721,5725,5730,5738],{"__ignoreMap":1081},[1086,5705,5706],{"class":1088,"line":1089},[1086,5707,5708],{"class":1092},"# Check Python version in environment\n",[1086,5710,5711,5713],{"class":1088,"line":1096},[1086,5712,1481],{"class":1170},[1086,5714,1484],{"class":1103},[1086,5716,5717,5719],{"class":1088,"line":1117},[1086,5718,1154],{"class":1099},[1086,5720,1505],{"class":1157},[1086,5722,5723],{"class":1088,"line":1132},[1086,5724,1136],{"emptyLinePlaceholder":1135},[1086,5726,5727],{"class":1088,"line":1139},[1086,5728,5729],{"class":1092},"# Recreate with specific Python version\n",[1086,5731,5732,5734,5736],{"class":1088,"line":1145},[1086,5733,5576],{"class":1099},[1086,5735,5579],{"class":1157},[1086,5737,4888],{"class":1103},[1086,5739,5740,5742,5744,5746],{"class":1088,"line":1151},[1086,5741,1347],{"class":1099},[1086,5743,1158],{"class":1157},[1086,5745,1161],{"class":1103},[1086,5747,4888],{"class":1103},[1026,5749,5750],{},[1049,5751,5752],{},"Permission errors:",[1076,5754,5756],{"className":1078,"code":5755,"language":1080,"meta":1081,"style":1081},"# Fix ownership (Linux/macOS)\nsudo chown -R $(whoami) venv/\n\n# Use --user flag as alternative\npip install --user django\n",[1083,5757,5758,5763,5783,5787,5792],{"__ignoreMap":1081},[1086,5759,5760],{"class":1088,"line":1089},[1086,5761,5762],{"class":1092},"# Fix ownership (Linux/macOS)\n",[1086,5764,5765,5768,5771,5774,5776,5779,5781],{"class":1088,"line":1096},[1086,5766,5767],{"class":1099},"sudo",[1086,5769,5770],{"class":1103}," chown",[1086,5772,5773],{"class":1157}," -R",[1086,5775,4414],{"class":1820},[1086,5777,5778],{"class":1099},"whoami",[1086,5780,4257],{"class":1820},[1086,5782,5562],{"class":1103},[1086,5784,5785],{"class":1088,"line":1117},[1086,5786,1136],{"emptyLinePlaceholder":1135},[1086,5788,5789],{"class":1088,"line":1132},[1086,5790,5791],{"class":1092},"# Use --user flag as alternative\n",[1086,5793,5794,5796,5798,5801],{"class":1088,"line":1139},[1086,5795,1100],{"class":1099},[1086,5797,1104],{"class":1103},[1086,5799,5800],{"class":1157}," --user",[1086,5802,2460],{"class":1103},[1035,5804,5806],{"id":5805},"environment-debugging","Environment Debugging",[1026,5808,5809],{},[1049,5810,5811],{},"Check environment status:",[1076,5813,5815],{"className":1078,"code":5814,"language":1080,"meta":1081,"style":1081},"# Show Python path\npython -c \"import sys; print('\\n'.join(sys.path))\"\n\n# Show installed packages\npip list\n\n# Show package information\npip show django\n\n# Check environment variables\nenv | grep VIRTUAL_ENV\n\n# Verify Django installation\npython -c \"import django; print(django.get_version())\"\n",[1083,5816,5817,5822,5835,5839,5844,5850,5854,5859,5867,5871,5876,5887,5891,5896],{"__ignoreMap":1081},[1086,5818,5819],{"class":1088,"line":1089},[1086,5820,5821],{"class":1092},"# Show Python path\n",[1086,5823,5824,5826,5828,5830,5833],{"class":1088,"line":1096},[1086,5825,1154],{"class":1099},[1086,5827,4568],{"class":1157},[1086,5829,2573],{"class":2572},[1086,5831,5832],{"class":1103},"import sys; print('\\n'.join(sys.path))",[1086,5834,2579],{"class":2572},[1086,5836,5837],{"class":1088,"line":1117},[1086,5838,1136],{"emptyLinePlaceholder":1135},[1086,5840,5841],{"class":1088,"line":1132},[1086,5842,5843],{"class":1092},"# Show installed packages\n",[1086,5845,5846,5848],{"class":1088,"line":1139},[1086,5847,1100],{"class":1099},[1086,5849,2213],{"class":1103},[1086,5851,5852],{"class":1088,"line":1145},[1086,5853,1136],{"emptyLinePlaceholder":1135},[1086,5855,5856],{"class":1088,"line":1151},[1086,5857,5858],{"class":1092},"# Show package information\n",[1086,5860,5861,5863,5865],{"class":1088,"line":1167},[1086,5862,1100],{"class":1099},[1086,5864,3608],{"class":1103},[1086,5866,2460],{"class":1103},[1086,5868,5869],{"class":1088,"line":1177},[1086,5870,1136],{"emptyLinePlaceholder":1135},[1086,5872,5873],{"class":1088,"line":1189},[1086,5874,5875],{"class":1092},"# Check environment variables\n",[1086,5877,5878,5880,5882,5884],{"class":1088,"line":1194},[1086,5879,5301],{"class":1099},[1086,5881,3007],{"class":2255},[1086,5883,4430],{"class":1099},[1086,5885,5886],{"class":1103}," VIRTUAL_ENV\n",[1086,5888,5889],{"class":1088,"line":1200},[1086,5890,1136],{"emptyLinePlaceholder":1135},[1086,5892,5893],{"class":1088,"line":1212},[1086,5894,5895],{"class":1092},"# Verify Django installation\n",[1086,5897,5898,5900,5902,5904,5906],{"class":1088,"line":1220},[1086,5899,1154],{"class":1099},[1086,5901,4568],{"class":1157},[1086,5903,2573],{"class":2572},[1086,5905,4573],{"class":1103},[1086,5907,2579],{"class":2572},[1026,5909,5910],{},[1049,5911,5912],{},"Environment health check script:",[1076,5914,5916],{"className":3971,"code":5915,"language":1154,"meta":1081,"style":1081},"#!/usr/bin/env python\n# health_check.py\n\nimport sys\nimport os\nimport subprocess\n\ndef check_virtual_env():\n    \"\"\"Check if running in virtual environment\"\"\"\n    return hasattr(sys, 'real_prefix') or (\n        hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix\n    )\n\ndef check_django():\n    \"\"\"Check Django installation\"\"\"\n    try:\n        import django\n        return django.get_version()\n    except ImportError:\n        return None\n\ndef check_database():\n    \"\"\"Check database connectivity\"\"\"\n    try:\n        os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')\n        import django\n        django.setup()\n        from django.db import connection\n        connection.ensure_connection()\n        return True\n    except Exception as e:\n        return str(e)\n\nif __name__ == '__main__':\n    print(\"🔍 Environment Health Check\")\n    print(\"-\" * 30)\n    \n    # Virtual environment\n    if check_virtual_env():\n        print(\"✅ Virtual environment: Active\")\n    else:\n        print(\"❌ Virtual environment: Not active\")\n    \n    # Python version\n    print(f\"🐍 Python version: {sys.version}\")\n    \n    # Django\n    django_version = check_django()\n    if django_version:\n        print(f\"✅ Django version: {django_version}\")\n    else:\n        print(\"❌ Django: Not installed\")\n    \n    # Database\n    db_status = check_database()\n    if db_status is True:\n        print(\"✅ Database: Connected\")\n    else:\n        print(f\"❌ Database: {db_status}\")\n",[1083,5917,5918,5923,5928,5932,5939,5946,5953,5957,5969,5982,6012,6053,6057,6061,6070,6079,6086,6093,6108,6118,6125,6129,6138,6147,6153,6188,6194,6206,6223,6235,6242,6257,6271,6275,6295,6311,6332,6337,6342,6351,6367,6374,6389,6393,6398,6427,6431,6436,6447,6456,6478,6484,6499,6503,6508,6520,6536,6552,6559],{"__ignoreMap":1081},[1086,5919,5920],{"class":1088,"line":1089},[1086,5921,5922],{"class":1092},"#!/usr/bin/env python\n",[1086,5924,5925],{"class":1088,"line":1096},[1086,5926,5927],{"class":1092},"# health_check.py\n",[1086,5929,5930],{"class":1088,"line":1117},[1086,5931,1136],{"emptyLinePlaceholder":1135},[1086,5933,5934,5936],{"class":1088,"line":1132},[1086,5935,3991],{"class":3984},[1086,5937,5938],{"class":1827}," sys\n",[1086,5940,5941,5943],{"class":1088,"line":1139},[1086,5942,3991],{"class":3984},[1086,5944,5945],{"class":1827}," os\n",[1086,5947,5948,5950],{"class":1088,"line":1145},[1086,5949,3991],{"class":3984},[1086,5951,5952],{"class":1827}," subprocess\n",[1086,5954,5955],{"class":1088,"line":1151},[1086,5956,1136],{"emptyLinePlaceholder":1135},[1086,5958,5959,5962,5966],{"class":1088,"line":1167},[1086,5960,5961],{"class":1812},"def",[1086,5963,5965],{"class":5964},"sljsM"," check_virtual_env",[1086,5967,5968],{"class":1820},"():\n",[1086,5970,5971,5975,5979],{"class":1088,"line":1177},[1086,5972,5974],{"class":5973},"sm7ve","    \"\"\"",[1086,5976,5978],{"class":5977},"sVyVU","Check if running in virtual environment",[1086,5980,5981],{"class":5973},"\"\"\"\n",[1086,5983,5984,5987,5990,5992,5995,5997,5999,6002,6004,6006,6009],{"class":1088,"line":1189},[1086,5985,5986],{"class":3984},"    return",[1086,5988,5989],{"class":1170}," hasattr",[1086,5991,4024],{"class":1820},[1086,5993,5994],{"class":4021},"sys",[1086,5996,3997],{"class":1820},[1086,5998,4436],{"class":2572},[1086,6000,6001],{"class":1103},"real_prefix",[1086,6003,4027],{"class":2572},[1086,6005,4257],{"class":1820},[1086,6007,6008],{"class":2255}," or",[1086,6010,6011],{"class":1820}," (\n",[1086,6013,6014,6017,6019,6021,6023,6025,6028,6030,6032,6035,6038,6040,6043,6046,6048,6050],{"class":1088,"line":1194},[1086,6015,6016],{"class":1170},"        hasattr",[1086,6018,4024],{"class":1820},[1086,6020,5994],{"class":4021},[1086,6022,3997],{"class":1820},[1086,6024,4436],{"class":2572},[1086,6026,6027],{"class":1103},"base_prefix",[1086,6029,4027],{"class":2572},[1086,6031,4257],{"class":1820},[1086,6033,6034],{"class":2255}," and",[1086,6036,6037],{"class":1827}," sys",[1086,6039,3152],{"class":1820},[1086,6041,6027],{"class":6042},"sBPpx",[1086,6044,6045],{"class":2255}," !=",[1086,6047,6037],{"class":1827},[1086,6049,3152],{"class":1820},[1086,6051,6052],{"class":6042},"prefix\n",[1086,6054,6055],{"class":1088,"line":1200},[1086,6056,4177],{"class":1820},[1086,6058,6059],{"class":1088,"line":1212},[1086,6060,1136],{"emptyLinePlaceholder":1135},[1086,6062,6063,6065,6068],{"class":1088,"line":1220},[1086,6064,5961],{"class":1812},[1086,6066,6067],{"class":5964}," check_django",[1086,6069,5968],{"class":1820},[1086,6071,6072,6074,6077],{"class":1088,"line":1938},[1086,6073,5974],{"class":5973},[1086,6075,6076],{"class":5977},"Check Django installation",[1086,6078,5981],{"class":5973},[1086,6080,6081,6084],{"class":1088,"line":1943},[1086,6082,6083],{"class":3984},"    try",[1086,6085,2315],{"class":1820},[1086,6087,6088,6091],{"class":1088,"line":1949},[1086,6089,6090],{"class":3984},"        import",[1086,6092,2460],{"class":1827},[1086,6094,6095,6098,6100,6102,6105],{"class":1088,"line":1955},[1086,6096,6097],{"class":3984},"        return",[1086,6099,2160],{"class":1827},[1086,6101,3152],{"class":1820},[1086,6103,6104],{"class":4021},"get_version",[1086,6106,6107],{"class":1820},"()\n",[1086,6109,6110,6113,6116],{"class":1088,"line":1960},[1086,6111,6112],{"class":3984},"    except",[1086,6114,6115],{"class":4072}," ImportError",[1086,6117,2315],{"class":1820},[1086,6119,6120,6122],{"class":1088,"line":1966},[1086,6121,6097],{"class":3984},[1086,6123,6124],{"class":4061}," None\n",[1086,6126,6127],{"class":1088,"line":2262},[1086,6128,1136],{"emptyLinePlaceholder":1135},[1086,6130,6131,6133,6136],{"class":1088,"line":2267},[1086,6132,5961],{"class":1812},[1086,6134,6135],{"class":5964}," check_database",[1086,6137,5968],{"class":1820},[1086,6139,6140,6142,6145],{"class":1088,"line":2273},[1086,6141,5974],{"class":5973},[1086,6143,6144],{"class":5977},"Check database connectivity",[1086,6146,5981],{"class":5973},[1086,6148,6149,6151],{"class":1088,"line":2806},[1086,6150,6083],{"class":3984},[1086,6152,2315],{"class":1820},[1086,6154,6155,6158,6160,6163,6165,6168,6170,6172,6175,6177,6179,6181,6184,6186],{"class":1088,"line":2820},[1086,6156,6157],{"class":1827},"        os",[1086,6159,3152],{"class":1820},[1086,6161,6162],{"class":6042},"environ",[1086,6164,3152],{"class":1820},[1086,6166,6167],{"class":4021},"setdefault",[1086,6169,4024],{"class":1820},[1086,6171,4027],{"class":2572},[1086,6173,6174],{"class":1103},"DJANGO_SETTINGS_MODULE",[1086,6176,4027],{"class":2572},[1086,6178,3997],{"class":1820},[1086,6180,4436],{"class":2572},[1086,6182,6183],{"class":1103},"myproject.settings",[1086,6185,4027],{"class":2572},[1086,6187,4034],{"class":1820},[1086,6189,6190,6192],{"class":1088,"line":3471},[1086,6191,6090],{"class":3984},[1086,6193,2460],{"class":1827},[1086,6195,6196,6199,6201,6204],{"class":1088,"line":3484},[1086,6197,6198],{"class":1827},"        django",[1086,6200,3152],{"class":1820},[1086,6202,6203],{"class":4021},"setup",[1086,6205,6107],{"class":1820},[1086,6207,6208,6211,6213,6215,6218,6220],{"class":1088,"line":3489},[1086,6209,6210],{"class":3984},"        from",[1086,6212,2160],{"class":1827},[1086,6214,3152],{"class":1820},[1086,6216,6217],{"class":1827},"db ",[1086,6219,3991],{"class":3984},[1086,6221,6222],{"class":1827}," connection\n",[1086,6224,6225,6228,6230,6233],{"class":1088,"line":3499},[1086,6226,6227],{"class":1827},"        connection",[1086,6229,3152],{"class":1820},[1086,6231,6232],{"class":4021},"ensure_connection",[1086,6234,6107],{"class":1820},[1086,6236,6237,6239],{"class":1088,"line":3517},[1086,6238,6097],{"class":3984},[1086,6240,6241],{"class":4061}," True\n",[1086,6243,6244,6246,6249,6252,6255],{"class":1088,"line":4975},[1086,6245,6112],{"class":3984},[1086,6247,6248],{"class":4072}," Exception",[1086,6250,6251],{"class":3984}," as",[1086,6253,6254],{"class":1827}," e",[1086,6256,2315],{"class":1820},[1086,6258,6259,6261,6264,6266,6269],{"class":1088,"line":4988},[1086,6260,6097],{"class":3984},[1086,6262,6263],{"class":4072}," str",[1086,6265,4024],{"class":1820},[1086,6267,6268],{"class":4021},"e",[1086,6270,4034],{"class":1820},[1086,6272,6273],{"class":1088,"line":5009},[1086,6274,1136],{"emptyLinePlaceholder":1135},[1086,6276,6277,6279,6283,6286,6288,6291,6293],{"class":1088,"line":5021},[1086,6278,4300],{"class":3984},[1086,6280,6282],{"class":6281},"s131V"," __name__",[1086,6284,6285],{"class":2255}," ==",[1086,6287,4436],{"class":2572},[1086,6289,6290],{"class":1103},"__main__",[1086,6292,4027],{"class":2572},[1086,6294,2315],{"class":1820},[1086,6296,6297,6300,6302,6304,6307,6309],{"class":1088,"line":5032},[1086,6298,6299],{"class":1170},"    print",[1086,6301,4024],{"class":1820},[1086,6303,3210],{"class":2572},[1086,6305,6306],{"class":1103},"🔍 Environment Health Check",[1086,6308,3210],{"class":2572},[1086,6310,4034],{"class":1820},[1086,6312,6313,6315,6317,6319,6322,6324,6327,6330],{"class":1088,"line":5037},[1086,6314,6299],{"class":1170},[1086,6316,4024],{"class":1820},[1086,6318,3210],{"class":2572},[1086,6320,6321],{"class":1103},"-",[1086,6323,3210],{"class":2572},[1086,6325,6326],{"class":2255}," *",[1086,6328,6329],{"class":1110}," 30",[1086,6331,4034],{"class":1820},[1086,6333,6334],{"class":1088,"line":5049},[1086,6335,6336],{"class":1827},"    \n",[1086,6338,6339],{"class":1088,"line":5058},[1086,6340,6341],{"class":1092},"    # Virtual environment\n",[1086,6343,6344,6347,6349],{"class":1088,"line":5063},[1086,6345,6346],{"class":3984},"    if",[1086,6348,5965],{"class":4021},[1086,6350,5968],{"class":1820},[1086,6352,6353,6356,6358,6360,6363,6365],{"class":1088,"line":5068},[1086,6354,6355],{"class":1170},"        print",[1086,6357,4024],{"class":1820},[1086,6359,3210],{"class":2572},[1086,6361,6362],{"class":1103},"✅ Virtual environment: Active",[1086,6364,3210],{"class":2572},[1086,6366,4034],{"class":1820},[1086,6368,6369,6372],{"class":1088,"line":5074},[1086,6370,6371],{"class":3984},"    else",[1086,6373,2315],{"class":1820},[1086,6375,6376,6378,6380,6382,6385,6387],{"class":1088,"line":5112},[1086,6377,6355],{"class":1170},[1086,6379,4024],{"class":1820},[1086,6381,3210],{"class":2572},[1086,6383,6384],{"class":1103},"❌ Virtual environment: Not active",[1086,6386,3210],{"class":2572},[1086,6388,4034],{"class":1820},[1086,6390,6391],{"class":1088,"line":5124},[1086,6392,6336],{"class":1827},[1086,6394,6395],{"class":1088,"line":5136},[1086,6396,6397],{"class":1092},"    # Python version\n",[1086,6399,6400,6402,6404,6407,6410,6414,6416,6418,6420,6423,6425],{"class":1088,"line":5148},[1086,6401,6299],{"class":1170},[1086,6403,4024],{"class":1820},[1086,6405,6406],{"class":1812},"f",[1086,6408,6409],{"class":1103},"\"🐍 Python version: ",[1086,6411,6413],{"class":6412},"s3h35","{",[1086,6415,5994],{"class":4021},[1086,6417,3152],{"class":1820},[1086,6419,3174],{"class":6042},[1086,6421,6422],{"class":6412},"}",[1086,6424,3210],{"class":1103},[1086,6426,4034],{"class":1820},[1086,6428,6429],{"class":1088,"line":5153},[1086,6430,6336],{"class":1827},[1086,6432,6433],{"class":1088,"line":5158},[1086,6434,6435],{"class":1092},"    # Django\n",[1086,6437,6438,6441,6443,6445],{"class":1088,"line":5164},[1086,6439,6440],{"class":1827},"    django_version ",[1086,6442,1821],{"class":1820},[1086,6444,6067],{"class":4021},[1086,6446,6107],{"class":1820},[1086,6448,6449,6451,6454],{"class":1088,"line":5184},[1086,6450,6346],{"class":3984},[1086,6452,6453],{"class":1827}," django_version",[1086,6455,2315],{"class":1820},[1086,6457,6458,6460,6462,6464,6467,6469,6472,6474,6476],{"class":1088,"line":5196},[1086,6459,6355],{"class":1170},[1086,6461,4024],{"class":1820},[1086,6463,6406],{"class":1812},[1086,6465,6466],{"class":1103},"\"✅ Django version: ",[1086,6468,6413],{"class":6412},[1086,6470,6471],{"class":4021},"django_version",[1086,6473,6422],{"class":6412},[1086,6475,3210],{"class":1103},[1086,6477,4034],{"class":1820},[1086,6479,6480,6482],{"class":1088,"line":5207},[1086,6481,6371],{"class":3984},[1086,6483,2315],{"class":1820},[1086,6485,6486,6488,6490,6492,6495,6497],{"class":1088,"line":5212},[1086,6487,6355],{"class":1170},[1086,6489,4024],{"class":1820},[1086,6491,3210],{"class":2572},[1086,6493,6494],{"class":1103},"❌ Django: Not installed",[1086,6496,3210],{"class":2572},[1086,6498,4034],{"class":1820},[1086,6500,6501],{"class":1088,"line":5217},[1086,6502,6336],{"class":1827},[1086,6504,6505],{"class":1088,"line":5229},[1086,6506,6507],{"class":1092},"    # Database\n",[1086,6509,6511,6514,6516,6518],{"class":1088,"line":6510},55,[1086,6512,6513],{"class":1827},"    db_status ",[1086,6515,1821],{"class":1820},[1086,6517,6135],{"class":4021},[1086,6519,6107],{"class":1820},[1086,6521,6523,6525,6528,6531,6534],{"class":1088,"line":6522},56,[1086,6524,6346],{"class":3984},[1086,6526,6527],{"class":1827}," db_status ",[1086,6529,6530],{"class":2255},"is",[1086,6532,6533],{"class":4061}," True",[1086,6535,2315],{"class":1820},[1086,6537,6539,6541,6543,6545,6548,6550],{"class":1088,"line":6538},57,[1086,6540,6355],{"class":1170},[1086,6542,4024],{"class":1820},[1086,6544,3210],{"class":2572},[1086,6546,6547],{"class":1103},"✅ Database: Connected",[1086,6549,3210],{"class":2572},[1086,6551,4034],{"class":1820},[1086,6553,6555,6557],{"class":1088,"line":6554},58,[1086,6556,6371],{"class":3984},[1086,6558,2315],{"class":1820},[1086,6560,6562,6564,6566,6568,6571,6573,6576,6578,6580],{"class":1088,"line":6561},59,[1086,6563,6355],{"class":1170},[1086,6565,4024],{"class":1820},[1086,6567,6406],{"class":1812},[1086,6569,6570],{"class":1103},"\"❌ Database: ",[1086,6572,6413],{"class":6412},[1086,6574,6575],{"class":4021},"db_status",[1086,6577,6422],{"class":6412},[1086,6579,3210],{"class":1103},[1086,6581,4034],{"class":1820},[1026,6583,6584],{},"Virtual environments are fundamental to professional Django development. Proper setup and management ensure consistent, reproducible development environments that prevent dependency conflicts and simplify deployment processes.",[6586,6587,6588],"style",{},"html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .sz9Cv, html code.shiki .sz9Cv{--shiki-light:#91B859;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sSC40, html code.shiki .sSC40{--shiki-light:#90A4AE;--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .suXOh, html code.shiki .suXOh{--shiki-light:#E53935;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sq3J1, html code.shiki .sq3J1{--shiki-light:#FF5370;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .su_V2, html code.shiki .su_V2{--shiki-light:#90A4AE;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sm7ve, html code.shiki .sm7ve{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#B5695977;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D77;--shiki-dark-font-style:inherit}html pre.shiki code .sVyVU, html code.shiki .sVyVU{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B56959;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D;--shiki-dark-font-style:inherit}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .s131V, html code.shiki .s131V{--shiki-light:#90A4AE;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .s3h35, html code.shiki .s3h35{--shiki-light:#F76D47;--shiki-default:#A65E2B;--shiki-dark:#C99076}",{"title":1081,"searchDepth":1089,"depth":1096,"links":6590},[6591,6595,6600,6605,6609,6614,6618,6624],{"id":1032,"depth":1096,"text":1033,"children":6592},[6593,6594],{"id":1037,"depth":1117,"text":1038},{"id":1073,"depth":1117,"text":1074},{"id":1232,"depth":1096,"text":1233,"children":6596},[6597,6598,6599],{"id":1236,"depth":1117,"text":1237},{"id":1444,"depth":1117,"text":1445},{"id":1585,"depth":1117,"text":1586},{"id":1597,"depth":1096,"text":1598,"children":6601},[6602,6603,6604],{"id":1601,"depth":1117,"text":1602},{"id":1779,"depth":1117,"text":1779},{"id":2046,"depth":1117,"text":2047},{"id":2392,"depth":1096,"text":2393,"children":6606},[6607,6608],{"id":2396,"depth":1117,"text":2396},{"id":2983,"depth":1117,"text":2984},{"id":3659,"depth":1096,"text":3660,"children":6610},[6611,6612,6613],{"id":3663,"depth":1117,"text":3664},{"id":3673,"depth":1117,"text":3674},{"id":3821,"depth":1117,"text":3822},{"id":4185,"depth":1096,"text":4186,"children":6615},[6616,6617],{"id":4189,"depth":1117,"text":4190},{"id":4709,"depth":1117,"text":4710},{"id":5241,"depth":1096,"text":921,"children":6619},[6620,6621,6622,6623],{"id":5244,"depth":1117,"text":5245},{"id":5323,"depth":1117,"text":5324},{"id":5333,"depth":1117,"text":3674},{"id":5468,"depth":1117,"text":3822},{"id":5531,"depth":1096,"text":5532,"children":6625},[6626,6627],{"id":5535,"depth":1117,"text":5536},{"id":5805,"depth":1117,"text":5806},"md",null,{},{"title":66,"description":1028},"y1W9ClXDARzKqK6N3vPJhCRZZKGOEx4sDEkANmtmvlg",[6634,6636],{"title":62,"path":63,"stem":64,"description":6635,"children":-1},"The right tools can dramatically improve your Django development experience. This comprehensive guide covers essential tools, their configuration, and best practices for creating a productive development environment.",{"title":70,"path":71,"stem":72,"description":6637,"children":-1},"Django's admin interface and management commands are powerful tools for development, testing, and maintenance. This comprehensive guide covers both the built-in admin system and the extensive management command ecosystem.",1772474900606]