We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Logos in base/static/logos should be more organized
Currently, all logos (partner+project logos) are stored together in the `static/logos` directory. Introduce two sub-dirs. called `partern` and `project` .

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `base/views.py`
Content:
```
1 import os
2 import re
3 
4 import markdown2
5 from django.core.mail import send_mail
6 from django.shortcuts import render
7 from django.views.generic import View
8 
9 try:
10     import oeplatform.securitysettings as sec
11 except:
12     import logging
13     logging.error("No securitysettings found. Triggerd in base/views.py")
14 
15 from base.forms import ContactForm
16 
17 # Create your views here.
18 
19 SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
20 
21 
22 class Welcome(View):
23     def get(self, request):
24         os.path.dirname(os.path.realpath(__file__))
25         version_expr = r"^(?P<major>\d+)\.(?P<minor>\d+)+\.(?P<patch>\d+)$"
26         markdowner = markdown2.Markdown()
27         with open(os.path.join(SITE_ROOT, "..", "VERSION")) as version_file:
28             match = re.match(version_expr, version_file.read())
29             major, minor, patch = match.groups()
30         with open(
31             os.path.join(
32                 SITE_ROOT,
33                 "..",
34                 "versions/changelogs/%s_%s_%s.md" % (major, minor, patch),
35             )
36         ) as change_file:
37             changes = markdowner.convert(
38                 "\n".join(line for line in change_file.readlines())
39             )
40         return render(
41             request,
42             "base/index.html",
43             {"version": "%s.%s.%s" % (major, minor, patch), "changes": changes},
44         )
45 
46 
47 def get_logs(request):
48     version_expr = r"^(?P<major>\d+)_(?P<major>\d+)+_(?P<major>\d+)\.md$"
49     for file in os.listdir("../versions/changelogs"):
50         match = re.match(version_expr, file)
51         markdowner = markdown2.Markdown()
52         if match:
53             major, minor, patch = match.groups()
54             with open("versions/changelogs" + file) as f:
55                 logs[(major, minor, patch)] = markdowner.convert(
56                     "\n".join(line for line in f.readlines())
57                 )
58 
59 
60 def redir(request, target):
61     return render(request, "base/{target}.html".format(target=target), {})
62 
63 
64 class ContactView(View):
65     error_css_class = "error"
66     required_css_class = "required"
67 
68     def post(self, request):
69         form = ContactForm(data=request.POST)
70         if form.is_valid():
71             receps = sec.CONTACT_ADDRESSES.get(
72                 request.POST["contact_category"], "technical"
73             )
74             send_mail(
75                 request.POST.get("contact_topic"),
76                 f"{request.POST.get('contact_name')} ({request.POST.get('contact_email')}) wrote: \n"
77                 + request.POST.get("content"),
78                 sec.DEFAULT_FROM_EMAIL,
79                 receps,
80                 fail_silently=False,
81             )
82             return render(
83                 request, "base/contact.html", {"form": ContactForm(), "success": True}
84             )
85         else:
86             return render(
87                 request, "base/contact.html", {"form": form, "success": False}
88             )
89 
90     def get(self, request):
91         return render(
92             request, "base/contact.html", {"form": ContactForm(), "success": False}
93         )
94 
95 
96 def robot(request):
97     return render(request, "base/robots.txt", {}, content_type="text/plain")
98 
99 
100 def handler500(request):
101     response = render(request, "base/500.html", {})
102     response.status_code = 500
103     return response
104 
105 
106 def handler404(request, exception):
107     response = render(request, "base/404.html", {})
108     response.status_code = 404
109     return response
110
```

Path: `base/urls.py`
Content:
```
1 from django.conf.urls import url, include
2 from django.urls import path
3 from base import views
4 
5 urlpatterns = [
6     url(r"^robots.txt$", views.robot),
7     url(r"^$", views.Welcome.as_view(), name="index"),
8     url(r"^about/$", views.redir, {"target": "about"}, name="index"),
9     url(r"^faq/$", views.redir, {"target": "faq"}, name="index"),
10     url(r"^discussion/$", views.redir, {"target": "discussion"}, name="index"),
11     url(r"^contact/$", views.ContactView.as_view(), name="index"),
12     url(r"^legal/privacy_policy/$", views.redir, {"target": "privacy_policy"}, name="index"),
13     url(r"^legal/tou/$", views.redir, {"target": "terms_of_use"}, name="index"),
14 ] + [path('captcha/', include('captcha.urls'))]
15
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/base/urls.py b/base/urls.py
--- a/base/urls.py
+++ b/base/urls.py
@@ -5,7 +5,8 @@
 urlpatterns = [
     url(r"^robots.txt$", views.robot),
     url(r"^$", views.Welcome.as_view(), name="index"),
-    url(r"^about/$", views.redir, {"target": "about"}, name="index"),
+    url(r"^about/$", views.AboutPage.as_view(), name="index"),
+    url(r"^about/project-detail/(?P<project_id>[\w\-]+)/$", views.AboutProjectDetail.as_view(), name="project_detail"),
     url(r"^faq/$", views.redir, {"target": "faq"}, name="index"),
     url(r"^discussion/$", views.redir, {"target": "discussion"}, name="index"),
     url(r"^contact/$", views.ContactView.as_view(), name="index"),
diff --git a/base/views.py b/base/views.py
--- a/base/views.py
+++ b/base/views.py
@@ -1,5 +1,8 @@
+import json
 import os
 import re
+import pathlib
+from django.apps import apps
 
 import markdown2
 from django.core.mail import send_mail
@@ -107,3 +110,55 @@
     response = render(request, "base/404.html", {})
     response.status_code = 404
     return response
+
+
+def get_json_content(path, json_id=None):
+    """ Parse all jsons from given path and return as 
+        list or return a single parsed json by id ->  
+        The json must have a field called id. 
+
+    Args:
+        path (string): path to directory like 'static/project_pages_content/'
+        json_id (string, optional): ID value that must match the value of json[id]. Defaults to None.
+
+    Returns:
+        list[object]: List of all deserialized json files in path 
+        or
+        object: single json python object
+    """
+    
+    if path is not None:
+        all_jsons=[]
+        for _json in os.listdir(path=path):
+            with open(os.path.join(path, _json), "r", encoding='utf-8') as json_content:
+                content = json.load(json_content)
+                all_jsons.append(content)
+
+        if json_id is None:
+            return all_jsons
+        else:
+            content_by_id = [i for i in all_jsons if json_id == i["id"] and "template" != i["id"]]
+            return content_by_id[0]
+    # TODO: catch the exception if path is none 
+    else:
+        return {"error": "Path cant be None. Please provide the path to '/static/project_detail_pages_content/' . You can create a new Project by adding an JSON file like the '/static/project_detail_pages_content/PROJECT_TEMPLATE.json'."}
+
+class AboutPage(View):
+# docstring
+    projects_content_static = "project_detail_pages_content"
+    projects_content_path = os.path.join(sec.STATIC_ROOT, projects_content_static)
+
+    def get(self, request, projects_content_path=projects_content_path):
+        projects = get_json_content(path=projects_content_path)
+
+        return render(request, "base/about.html", {"projects": projects})
+
+class AboutProjectDetail(AboutPage):
+# docstring
+
+    def get(self, request, project_id):
+        project = get_json_content(path=self.projects_content_path, json_id=project_id)
+
+        return render(request, "base/project-detail.html", {"project": project})
+    
+          
\ No newline at end of file

{"golden_diff": "diff --git a/base/urls.py b/base/urls.py\n--- a/base/urls.py\n+++ b/base/urls.py\n@@ -5,7 +5,8 @@\n urlpatterns = [\n     url(r\"^robots.txt$\", views.robot),\n     url(r\"^$\", views.Welcome.as_view(), name=\"index\"),\n-    url(r\"^about/$\", views.redir, {\"target\": \"about\"}, name=\"index\"),\n+    url(r\"^about/$\", views.AboutPage.as_view(), name=\"index\"),\n+    url(r\"^about/project-detail/(?P<project_id>[\\w\\-]+)/$\", views.AboutProjectDetail.as_view(), name=\"project_detail\"),\n     url(r\"^faq/$\", views.redir, {\"target\": \"faq\"}, name=\"index\"),\n     url(r\"^discussion/$\", views.redir, {\"target\": \"discussion\"}, name=\"index\"),\n     url(r\"^contact/$\", views.ContactView.as_view(), name=\"index\"),\ndiff --git a/base/views.py b/base/views.py\n--- a/base/views.py\n+++ b/base/views.py\n@@ -1,5 +1,8 @@\n+import json\n import os\n import re\n+import pathlib\n+from django.apps import apps\n \n import markdown2\n from django.core.mail import send_mail\n@@ -107,3 +110,55 @@\n     response = render(request, \"base/404.html\", {})\n     response.status_code = 404\n     return response\n+\n+\n+def get_json_content(path, json_id=None):\n+    \"\"\" Parse all jsons from given path and return as \n+        list or return a single parsed json by id ->  \n+        The json must have a field called id. \n+\n+    Args:\n+        path (string): path to directory like 'static/project_pages_content/'\n+        json_id (string, optional): ID value that must match the value of json[id]. Defaults to None.\n+\n+    Returns:\n+        list[object]: List of all deserialized json files in path \n+        or\n+        object: single json python object\n+    \"\"\"\n+    \n+    if path is not None:\n+        all_jsons=[]\n+        for _json in os.listdir(path=path):\n+            with open(os.path.join(path, _json), \"r\", encoding='utf-8') as json_content:\n+                content = json.load(json_content)\n+                all_jsons.append(content)\n+\n+        if json_id is None:\n+            return all_jsons\n+        else:\n+            content_by_id = [i for i in all_jsons if json_id == i[\"id\"] and \"template\" != i[\"id\"]]\n+            return content_by_id[0]\n+    # TODO: catch the exception if path is none \n+    else:\n+        return {\"error\": \"Path cant be None. Please provide the path to '/static/project_detail_pages_content/' . You can create a new Project by adding an JSON file like the '/static/project_detail_pages_content/PROJECT_TEMPLATE.json'.\"}\n+\n+class AboutPage(View):\n+# docstring\n+    projects_content_static = \"project_detail_pages_content\"\n+    projects_content_path = os.path.join(sec.STATIC_ROOT, projects_content_static)\n+\n+    def get(self, request, projects_content_path=projects_content_path):\n+        projects = get_json_content(path=projects_content_path)\n+\n+        return render(request, \"base/about.html\", {\"projects\": projects})\n+\n+class AboutProjectDetail(AboutPage):\n+# docstring\n+\n+    def get(self, request, project_id):\n+        project = get_json_content(path=self.projects_content_path, json_id=project_id)\n+\n+        return render(request, \"base/project-detail.html\", {\"project\": project})\n+    \n+          \n\\ No newline at end of file\n", "issue": "Logos in base/static/logos should be more organized\nCurrently, all logos (partner+project logos) are stored together in the `static/logos` directory. Introduce two sub-dirs. called `partern` and `project` .\n", "before_files": [{"content": "import os\nimport re\n\nimport markdown2\nfrom django.core.mail import send_mail\nfrom django.shortcuts import render\nfrom django.views.generic import View\n\ntry:\n    import oeplatform.securitysettings as sec\nexcept:\n    import logging\n    logging.error(\"No securitysettings found. Triggerd in base/views.py\")\n\nfrom base.forms import ContactForm\n\n# Create your views here.\n\nSITE_ROOT = os.path.dirname(os.path.realpath(__file__))\n\n\nclass Welcome(View):\n    def get(self, request):\n        os.path.dirname(os.path.realpath(__file__))\n        version_expr = r\"^(?P<major>\\d+)\\.(?P<minor>\\d+)+\\.(?P<patch>\\d+)$\"\n        markdowner = markdown2.Markdown()\n        with open(os.path.join(SITE_ROOT, \"..\", \"VERSION\")) as version_file:\n            match = re.match(version_expr, version_file.read())\n            major, minor, patch = match.groups()\n        with open(\n            os.path.join(\n                SITE_ROOT,\n                \"..\",\n                \"versions/changelogs/%s_%s_%s.md\" % (major, minor, patch),\n            )\n        ) as change_file:\n            changes = markdowner.convert(\n                \"\\n\".join(line for line in change_file.readlines())\n            )\n        return render(\n            request,\n            \"base/index.html\",\n            {\"version\": \"%s.%s.%s\" % (major, minor, patch), \"changes\": changes},\n        )\n\n\ndef get_logs(request):\n    version_expr = r\"^(?P<major>\\d+)_(?P<major>\\d+)+_(?P<major>\\d+)\\.md$\"\n    for file in os.listdir(\"../versions/changelogs\"):\n        match = re.match(version_expr, file)\n        markdowner = markdown2.Markdown()\n        if match:\n            major, minor, patch = match.groups()\n            with open(\"versions/changelogs\" + file) as f:\n                logs[(major, minor, patch)] = markdowner.convert(\n                    \"\\n\".join(line for line in f.readlines())\n                )\n\n\ndef redir(request, target):\n    return render(request, \"base/{target}.html\".format(target=target), {})\n\n\nclass ContactView(View):\n    error_css_class = \"error\"\n    required_css_class = \"required\"\n\n    def post(self, request):\n        form = ContactForm(data=request.POST)\n        if form.is_valid():\n            receps = sec.CONTACT_ADDRESSES.get(\n                request.POST[\"contact_category\"], \"technical\"\n            )\n            send_mail(\n                request.POST.get(\"contact_topic\"),\n                f\"{request.POST.get('contact_name')} ({request.POST.get('contact_email')}) wrote: \\n\"\n                + request.POST.get(\"content\"),\n                sec.DEFAULT_FROM_EMAIL,\n                receps,\n                fail_silently=False,\n            )\n            return render(\n                request, \"base/contact.html\", {\"form\": ContactForm(), \"success\": True}\n            )\n        else:\n            return render(\n                request, \"base/contact.html\", {\"form\": form, \"success\": False}\n            )\n\n    def get(self, request):\n        return render(\n            request, \"base/contact.html\", {\"form\": ContactForm(), \"success\": False}\n        )\n\n\ndef robot(request):\n    return render(request, \"base/robots.txt\", {}, content_type=\"text/plain\")\n\n\ndef handler500(request):\n    response = render(request, \"base/500.html\", {})\n    response.status_code = 500\n    return response\n\n\ndef handler404(request, exception):\n    response = render(request, \"base/404.html\", {})\n    response.status_code = 404\n    return response\n", "path": "base/views.py"}, {"content": "from django.conf.urls import url, include\nfrom django.urls import path\nfrom base import views\n\nurlpatterns = [\n    url(r\"^robots.txt$\", views.robot),\n    url(r\"^$\", views.Welcome.as_view(), name=\"index\"),\n    url(r\"^about/$\", views.redir, {\"target\": \"about\"}, name=\"index\"),\n    url(r\"^faq/$\", views.redir, {\"target\": \"faq\"}, name=\"index\"),\n    url(r\"^discussion/$\", views.redir, {\"target\": \"discussion\"}, name=\"index\"),\n    url(r\"^contact/$\", views.ContactView.as_view(), name=\"index\"),\n    url(r\"^legal/privacy_policy/$\", views.redir, {\"target\": \"privacy_policy\"}, name=\"index\"),\n    url(r\"^legal/tou/$\", views.redir, {\"target\": \"terms_of_use\"}, name=\"index\"),\n] + [path('captcha/', include('captcha.urls'))]\n", "path": "base/urls.py"}], "after_files": [{"content": "import json\nimport os\nimport re\nimport pathlib\nfrom django.apps import apps\n\nimport markdown2\nfrom django.core.mail import send_mail\nfrom django.shortcuts import render\nfrom django.views.generic import View\n\ntry:\n    import oeplatform.securitysettings as sec\nexcept:\n    import logging\n    logging.error(\"No securitysettings found. Triggerd in base/views.py\")\n\nfrom base.forms import ContactForm\n\n# Create your views here.\n\nSITE_ROOT = os.path.dirname(os.path.realpath(__file__))\n\n\nclass Welcome(View):\n    def get(self, request):\n        os.path.dirname(os.path.realpath(__file__))\n        version_expr = r\"^(?P<major>\\d+)\\.(?P<minor>\\d+)+\\.(?P<patch>\\d+)$\"\n        markdowner = markdown2.Markdown()\n        with open(os.path.join(SITE_ROOT, \"..\", \"VERSION\")) as version_file:\n            match = re.match(version_expr, version_file.read())\n            major, minor, patch = match.groups()\n        with open(\n            os.path.join(\n                SITE_ROOT,\n                \"..\",\n                \"versions/changelogs/%s_%s_%s.md\" % (major, minor, patch),\n            )\n        ) as change_file:\n            changes = markdowner.convert(\n                \"\\n\".join(line for line in change_file.readlines())\n            )\n        return render(\n            request,\n            \"base/index.html\",\n            {\"version\": \"%s.%s.%s\" % (major, minor, patch), \"changes\": changes},\n        )\n\n\ndef get_logs(request):\n    version_expr = r\"^(?P<major>\\d+)_(?P<major>\\d+)+_(?P<major>\\d+)\\.md$\"\n    for file in os.listdir(\"../versions/changelogs\"):\n        match = re.match(version_expr, file)\n        markdowner = markdown2.Markdown()\n        if match:\n            major, minor, patch = match.groups()\n            with open(\"versions/changelogs\" + file) as f:\n                logs[(major, minor, patch)] = markdowner.convert(\n                    \"\\n\".join(line for line in f.readlines())\n                )\n\n\ndef redir(request, target):\n    return render(request, \"base/{target}.html\".format(target=target), {})\n\n\nclass ContactView(View):\n    error_css_class = \"error\"\n    required_css_class = \"required\"\n\n    def post(self, request):\n        form = ContactForm(data=request.POST)\n        if form.is_valid():\n            receps = sec.CONTACT_ADDRESSES.get(\n                request.POST[\"contact_category\"], \"technical\"\n            )\n            send_mail(\n                request.POST.get(\"contact_topic\"),\n                f\"{request.POST.get('contact_name')} ({request.POST.get('contact_email')}) wrote: \\n\"\n                + request.POST.get(\"content\"),\n                sec.DEFAULT_FROM_EMAIL,\n                receps,\n                fail_silently=False,\n            )\n            return render(\n                request, \"base/contact.html\", {\"form\": ContactForm(), \"success\": True}\n            )\n        else:\n            return render(\n                request, \"base/contact.html\", {\"form\": form, \"success\": False}\n            )\n\n    def get(self, request):\n        return render(\n            request, \"base/contact.html\", {\"form\": ContactForm(), \"success\": False}\n        )\n\n\ndef robot(request):\n    return render(request, \"base/robots.txt\", {}, content_type=\"text/plain\")\n\n\ndef handler500(request):\n    response = render(request, \"base/500.html\", {})\n    response.status_code = 500\n    return response\n\n\ndef handler404(request, exception):\n    response = render(request, \"base/404.html\", {})\n    response.status_code = 404\n    return response\n\n\ndef get_json_content(path, json_id=None):\n    \"\"\" Parse all jsons from given path and return as \n        list or return a single parsed json by id ->  \n        The json must have a field called id. \n\n    Args:\n        path (string): path to directory like 'static/project_pages_content/'\n        json_id (string, optional): ID value that must match the value of json[id]. Defaults to None.\n\n    Returns:\n        list[object]: List of all deserialized json files in path \n        or\n        object: single json python object\n    \"\"\"\n    \n    if path is not None:\n        all_jsons=[]\n        for _json in os.listdir(path=path):\n            with open(os.path.join(path, _json), \"r\", encoding='utf-8') as json_content:\n                content = json.load(json_content)\n                all_jsons.append(content)\n\n        if json_id is None:\n            return all_jsons\n        else:\n            content_by_id = [i for i in all_jsons if json_id == i[\"id\"] and \"template\" != i[\"id\"]]\n            return content_by_id[0]\n    # TODO: catch the exception if path is none \n    else:\n        return {\"error\": \"Path cant be None. Please provide the path to '/static/project_detail_pages_content/' . You can create a new Project by adding an JSON file like the '/static/project_detail_pages_content/PROJECT_TEMPLATE.json'.\"}\n\nclass AboutPage(View):\n# docstring\n    projects_content_static = \"project_detail_pages_content\"\n    projects_content_path = os.path.join(sec.STATIC_ROOT, projects_content_static)\n\n    def get(self, request, projects_content_path=projects_content_path):\n        projects = get_json_content(path=projects_content_path)\n\n        return render(request, \"base/about.html\", {\"projects\": projects})\n\nclass AboutProjectDetail(AboutPage):\n# docstring\n\n    def get(self, request, project_id):\n        project = get_json_content(path=self.projects_content_path, json_id=project_id)\n\n        return render(request, \"base/project-detail.html\", {\"project\": project})\n    \n          ", "path": "base/views.py"}, {"content": "from django.conf.urls import url, include\nfrom django.urls import path\nfrom base import views\n\nurlpatterns = [\n    url(r\"^robots.txt$\", views.robot),\n    url(r\"^$\", views.Welcome.as_view(), name=\"index\"),\n    url(r\"^about/$\", views.AboutPage.as_view(), name=\"index\"),\n    url(r\"^about/project-detail/(?P<project_id>[\\w\\-]+)/$\", views.AboutProjectDetail.as_view(), name=\"project_detail\"),\n    url(r\"^faq/$\", views.redir, {\"target\": \"faq\"}, name=\"index\"),\n    url(r\"^discussion/$\", views.redir, {\"target\": \"discussion\"}, name=\"index\"),\n    url(r\"^contact/$\", views.ContactView.as_view(), name=\"index\"),\n    url(r\"^legal/privacy_policy/$\", views.redir, {\"target\": \"privacy_policy\"}, name=\"index\"),\n    url(r\"^legal/tou/$\", views.redir, {\"target\": \"terms_of_use\"}, name=\"index\"),\n] + [path('captcha/', include('captcha.urls'))]\n", "path": "base/urls.py"}]}